Question
Lister les droits d'un répertoire
- Lopes
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 15 ans 7 mois #7555
par Lopes
Lister les droits d'un répertoire a été créé 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
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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 15 ans 7 mois #7557
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Lister les droits d'un répertoire
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 = \"*\",
[Byte]$ToDepth = 255,
[Byte]$CurrentDepth = 0,
[Switch]$DebugMode
)
$CurrentDepth++
If ($DebugMode) { $DebugPreference = \"Continue\" }
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 $(\"Exclusion du dossier: $($_.FullName) (Explication: Profondeur courante : $CurrentDepth - Limite: $ToDepth)\"«»)
}
}
}[/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.
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 = \"*\",
[Byte]$ToDepth = 255,
[Byte]$CurrentDepth = 0,
[Switch]$DebugMode
)
$CurrentDepth++
If ($DebugMode) { $DebugPreference = \"Continue\" }
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 $(\"Exclusion du dossier: $($_.FullName) (Explication: Profondeur courante : $CurrentDepth - Limite: $ToDepth)\"«»)
}
}
}[/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 }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Lopes
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
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
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....
SUPER, merci beaucoup. ça fonctionne Tip Top
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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 15 ans 7 mois #7559
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Lister les droits d'un répertoire
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.
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 }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 7 mois #7562
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Lister les droits d'un répertoire
abcmedia écrit:
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
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.Je ne sais pas si je pourrais optimiser tout ça...
Et à l'avenir utilise si possible les balises codes, c'est plus lisible
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Lister les droits d'un répertoire