Question Lister les droits d'un répertoire

Plus d'informations
il y a 15 ans 7 mois #7555 par Lopes
Bonjour,
Je suis tout nouveau ici.
J'essaie de créer un script qui va lire les ACL des répertoires.

Seulement je veux lire uniquement les répertoires sur deux niveaux et sans les fichiers...
Problème j'arrive bien à lire sur deux niveaux mais les fichiers *.doc, xls, etc... sont aussi enregistrès dans mon fichier texte...

Quelque'un peut me donner un petit coup de main?
Se serait super cool.
Merci a tous
Voici mon script

############################################################
# Script de récupétation des droits de l'AD par Répertoire
# Projet : ABC-TEST
# Domaine : CH.RCC
# Auteur : AbcMedia
# Date de création : 4 Aout 2010
############################################################
#
# START Fonction Limitation de l'arboresence à deux répertoires
# Pour modifier la limitations modifier ligne le commutateur \"-ToDepth 1\" à la ligne lors de l'appel à -> Get-ChildItemToDepth

Function Get-ChildItemToDepth
{
Param(
[String]$Path = $PWD,
[String]$Filter = \"*\",
[Byte]$ToDepth = 255,
[Byte]$CurrentDepth = 0,
[Switch]$DebugMode
)

$CurrentDepth++
If ($DebugMode) { $DebugPreference = \"Continue\" }

Get-ChildItem $Path | Foreach-Object `
{
$_ | Where-Object { $_.Name -Like $Filter }

If ($_.PsIsContainer)
{
If ($CurrentDepth -le $ToDepth)
{
# Rappel de cette fonction
Get-ChildItemToDepth -Path $_.FullName -Filter $Filter `
-ToDepth $ToDepth -CurrentDepth $CurrentDepth
}
Else
{
Write-Debug $(\"Exclusion du dossier: $($_.FullName) \" + `
\"(Explication: Profondeur courante : $CurrentDepth - Limite: $ToDepth)\")
}
}
}
}
#END

# Lecture du le répertoire :
$share=\"\\serveur01\d$\data\documents\"

#Exécution de outil powershell
set-Location \"C:\Program Files\Quest Software\Management Shell for AD\"
if ($host.Name -notlike 'PowerGUI*')
{
Add-PSSnapin \"Quest.ActiveRoles.ADManagement\"
}

#Lecture des informations (Répertoire + Groupe + Utilisateur + Droits AD=ACL)
$infos=\"Folders\"+\";\"+\"Groups\"+\";\"+\"User\"+\";\"+\"Rights\"
#Ecriture des informations récoltées dans un fichier texte
write $infos | Out-File \"C:\Temp\Audit_FileSystem\FGUR_2Niv.txt\" -Append

#Lecture du répertoire racine en limitant les accès à maximum 2 sous-répertoires
get-ChildItemToDepth \"\\serveur01\d$\data\documents\" -ToDepth 1 -recurse -Exclude *.* | foreach {
$foldername=$_.FullName

write $foldername

$acls=(Get-Acl $foldername).Access
$acls | foreach {
$rights=$_.filesystemrights.tostring()
get-qadobject $_.IdentityReference.value |
foreach {
if ($_.Type -eq \"group\") {
$AGT = $_.NTAccountName
$Type = $_.Type
Foreach ($member in (get-qadgroupmember $_ -Indirect | where {$_.type -match \"user\"})) {
$infos=$foldername+\";\"+$_.NTAccountName+\";\"+$member.logonname+\";\"+$rights
write $infos | Out-File \"C:\Temp\Audit_FileSystem\FGUR_2Niv.txt\" -Append
}
}
elseif ($_.Type -eq \"user\") {
$infos=$foldername+\";\"+$_.NTAccountName+\";\"+$member.logonname+\";\"+$rights
write $infos | Out-File \"C:\Temp\Audit_FileSystem\FGUR_2Niv.txt\" -Append
}
}
}
}
#Fin du script :-)

Message édité par: abcmedia, à: 5/08/10 11:53<br><br>Message édité par: abcmedia, à: 5/08/10 13:24

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

Plus d'informations
il y a 15 ans 7 mois #7557 par Richard Lazaro
Bonjour,

Je me suis permis de modifier ta fonction, elle retourne maintenant que des objets de type dossier sans doublon avec ta récursivité

[code:1]Function Get-ChildItemToDepth
{
Param(
[String]$Path = $PWD,
[String]$Filter = \&quot;*\&quot;,
[Byte]$ToDepth = 255,
[Byte]$CurrentDepth = 0,
[Switch]$DebugMode
)

$CurrentDepth++
If ($DebugMode) { $DebugPreference = \&quot;Continue\&quot; }

Get-ChildItem $Path -Filter $Filter | ?{$_.PSIsContainer} | %{
Write-Output $_
if($CurrentDepth -le $ToDepth) {
Get-ChildItemToDepth -Path $_.FullName -Filter $Filter -ToDepth $ToDepth -CurrentDepth $CurrentDepth
} else {
Write-Debug $(\&quot;Exclusion du dossier: $($_.FullName) (Explication: Profondeur courante : $CurrentDepth - Limite: $ToDepth)\&quot;«»)
}
}
}[/code:1]

Tout d'abord, tu réinvente dans ton code le paramètre Filter de la cmdlet Get-ChildItem, et il me semble que tu fais des Foreach inutile.

Pense aussi au balise code quand tu mets un code, car là il était illisible.

J'ai pas regardé le reste du code (vu que je suis en entreprise, j'ai pas énormément de temps :/)

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 15 ans 7 mois #7558 par Lopes
Réponse de Lopes sur le sujet Re:Lister les droits d'un répertoire
Hello,
SUPER, merci beaucoup. ça fonctionne Tip Top :woohoo:

J'ai fait tourner le script cette nuit.
ça m'a généré un fichier de 25 MB et il a tourné pendant 16h00.... Je ne sais pas si je pourrais optimiser tout ça... Bon, il ne me reste plus qu'a automatiser le tout et le passer sous Excel et format web....

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

Plus d'informations
il y a 15 ans 7 mois #7559 par Richard Lazaro
Bonjour,

Je suis bien content si cela te convient alors ^^
Pour les performances, j'ai pas regardé plus en détails mais tu as énormément de ForEach imbriqué donc forcement ... tout dépendra des objets passé à ces foreach.

J'espère surtout que tu auras compris tes quelques erreurs ;]

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 15 ans 7 mois #7562 par Laurent Dardenne
abcmedia écrit:

Je ne sais pas si je pourrais optimiser tout ça...

Utiliser du code Win32 pour des traitements de masses sur le file système. Il existe qq posts sur le forum qui traitent du sujet.
Et à l'avenir utilise si possible les balises codes, c'est plus lisible :)<br><br>Message édité par: Laurent Dardenne, à: 6/08/10 12:26

Tutoriels PowerShell

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

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