Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1360 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [PowerShell] Lister rep. dont l'héritage des Permis. NTFS est bloqué

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PowerShell] Lister rep. dont l'héritage des Permis. NTFS est bloqué

n°2268179
BaF - FlOp
Posté le 21-10-2015 à 07:07:03  profilanswer
 

Salut,

 

Au sein d'un script existant, je souhaiterais intégrer un bloc qui permettrait de scanner une architecture de dossiers (sur serveur de fichiers) et récupérer une liste CSV des répertoires dont les permissions NTFS est désactivé.

 

en soit j'arrive à quelque chose de fonctionnel mais je bloque en fait au niveau de la gestion d'erreurs type : chemin trop long, accès refusé à un répertoire etc.
Plus exactement sur la fusion de 2 bouts de scripts qui gèrent bien indépendamment ces erreurs :o).

 

Bref, j'ai donc, là :

 

Un bout de script faisant le boulot en gérant l'erreur liée à un chemin trop long

Code :
  1. $Directory = Read-Host "Saisir le répertoire à scanner"
  2. Write-Host " "
  3. dir $Directory -Directory -recurse -ErrorAction SilentlyContinue -ErrorVariable err | get-acl |
  4. Where {$_.AreAccessRulesProtected} |
  5. Select @{Name="Path";Expression={Convert-Path $_.Path}},AreAccessRulesProtected | Export-Csv -Path c:\test\log\Liste_répertoires_heritage_bloque.csv
  6. foreach ($errorRecord in $err)
  7. {
  8.     if ($errorRecord.Exception -is [System.IO.PathTooLongException])
  9.     {
  10.         Write-Warning "Path too long in directory '$($errorRecord.TargetObject)'."
  11.     }
  12.     else
  13.     {
  14.         Write-Error -ErrorRecord $errorRecord
  15.     }
  16. }
 

Et un bout de script équivalent mais gérant l'erreur accès refusé

Code :
  1. $Directory = Read-Host "Saisir le répertoire à scanner"
  2. Write-Host " "
  3. dir $Directory -Directory -recurse -ErrorAction SilentlyContinue -ErrorVariable denied | get-acl |
  4. Where {$_.AreAccessRulesProtected} |
  5. Select @{Name="Path";Expression={Convert-Path $_.Path}},AreAccessRulesProtected | Export-Csv -Path c:\test\log\Liste_répertoires_heritage_bloque.csv
  6. foreach ($errorRecord in $denied)
  7. {
  8.     if ($errorRecord.Exception -is [System.UnauthorizedAccessException])
  9.     {
  10.         Write-Warning "Denied Access '$($errorRecord.TargetObject)'."
  11.     }
  12.     else
  13.     {
  14.         Write-Error -ErrorRecord $errorRecord
  15.     }
  16. }
  

Je bloque sur le mix des 2 scripts.
Bêtement (trop à priori :D), j'essaie quelque chose de ce type, mais ça ne passe pas (gère une erreur mais pas l'autre).

 
Code :
  1. $Directory = Read-Host "Saisir le répertoire à scanner"
  2. Write-Host " "
  3. dir $Directory -Directory -recurse -ErrorAction SilentlyContinue -ErrorVariable denied err | get-acl |
  4. Where {$_.AreAccessRulesProtected} |
  5. Select @{Name="Path";Expression={Convert-Path $_.Path}},AreAccessRulesProtected | Export-Csv -Path c:\test\log\Liste_répertoires_heritage_bloque.csv
  6. foreach ($errorRecord in $err)
  7. {
  8.     if ($errorRecord.Exception -is [System.IO.PathTooLongException])
  9.     {
  10.         Write-Warning "Path too long in directory '$($errorRecord.TargetObject)'."
  11.     }
  12.     else
  13.     {
  14.         Write-Error -ErrorRecord $errorRecord
  15.     }
  16. }
  17. foreach ($errorRecord in $denied)
  18. {
  19.     if ($errorRecord.Exception -is [System.UnauthorizedAccessException])
  20.     {
  21.         Write-Warning "Denied Access '$($errorRecord.TargetObject)'."
  22.     }
  23.     else
  24.     {
  25.         Write-Error -ErrorRecord $errorRecord
  26.     }
  27. }
 

Je ne suis pas du tout sur de l'utilisation de -ErrorVariable denied err, et de la possibilité d'aligner les variables comme cela.

 

En vous remerciant d'avance pour votre aiguillage  :jap:


Message édité par BaF - FlOp le 21-10-2015 à 07:08:14
mood
Publicité
Posté le 21-10-2015 à 07:07:03  profilanswer
 

n°2268266
BaF - FlOp
Posté le 21-10-2015 à 22:17:43  profilanswer
 

Mouarf, ça toujours mieux après une nuit de repos :o
 
Au lieu de me borner à vouloir utiliser 2 variables, j'ai, tout simplement, traité le type d'erreur d'un un même Foreach, avec du Else / ElseIf...
 

Code :
  1. foreach ($errorRecord in $err)
  2. {
  3.     if ($errorRecord.Exception -is [System.IO.PathTooLongException])
  4.     {
  5.         Write-Warning "Path too long in directory '$($errorRecord.TargetObject)'."
  6.     }
  7.     elseIf ($errorRecord.Exception -is [System.UnauthorizedAccessException])
  8.     {
  9.         Write-Warning "Denied Access '$($errorRecord.TargetObject)'."
  10.     }
  11.     else
  12.     {
  13.         Write-Error -ErrorRecord $errorRecord
  14.     }
  15. }



Message édité par BaF - FlOp le 21-10-2015 à 22:36:18
n°2268269
BaF - FlOp
Posté le 22-10-2015 à 00:26:24  profilanswer
 

Bon. ça fonctionne certes très bien localement, sur une architecture de dossiers test, relativement simple.

 

Par contre, dès que je teste sur une archi plus complexe (un partage hébergé de plusieurs Go), je me paie une erreur :


get-acl : Attempted to perform an unauthorized operation.
Au caractère C:\Users\******\Desktop\PowerShell\script.ps1:3 : 87
+ ... Variable err | get-acl |
+                    ~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-Acl], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetAclCommand

 

C'est une erreur assez commune d'après mes recherches, pour autant je ne parviens pas à la gérer.

 

EDIT :

 

Je viens de faire un certains nombre de tests, il s'avère que c'est en fait mon traitement de l'erreur "Accès refusé" qui ne fonctionne pas.

 

Le traitement se plante sur les répertoires auquel l'utilisateur qui lance le script n'a pas les permissions ET n'est pas le propriétaire.

 

J'ai du coup vu pas mal de choses sur le net mais il est bien souvent proposé de se rajouter en tant que propriétaire du dossier au préalable.

 

N'étant pas question de modifier cela sur les répertoires partagés, comment gérer cette erreur ?
Pourtant l'erreur qui s'affiche semble bien traitée avec le :

elseIf ($errorRecord.Exception -is [System.UnauthorizedAccessException])


 :??:  :??:

 

[:halp]


Message édité par BaF - FlOp le 22-10-2015 à 06:49:14

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [PowerShell] Lister rep. dont l'héritage des Permis. NTFS est bloqué

 

Sujets relatifs
sauvegarde d'environnement .bat / powershell[powershell] lister instances sql server distant
POWERSHELL ORACLE[Powershell] Recherche fichier à partir d'un csv
Script powershell et fichier CSV[PowerShel] Création utilisateur Office 365 via script powershell
[POWER SHELL] Problème d'import de module Active Directory[RESOLU] [POWERSHELL] Modifier des lignes précises sur un fichier
Powershell nettoyage serveur [Résolu] 
Plus de sujets relatifs à : [PowerShell] Lister rep. dont l'héritage des Permis. NTFS est bloqué


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR