Question
Tester le droit d'écriture sur un fichier (Résolu)
- Gérard Langlois
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 5
- Remerciements reçus 0
je débute en powershell.
Je voudrais savoir si à l'intérieur d'un script powershell il est possible de vérifier si j'ai les droits d'écriture sur un fichier donné.<br><br>Message édité par: Arnaud, à: 27/11/08 22:41
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
l'approche sur un répertoire :
[code:1]
#Récupère les infos du compte courant
$CompteCourant=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$DirName=\"C:\System Volume Information\"
#Recherche si le compte courant à les droits Fullcontrol ou Write sur le répertoire $DirName
#Récupère les droits du fichier
$isEcritureAutorisé=((get-acl $FileName).access|`
#Filtre le compte courant
? {$_.IdentityReference -eq $CompteCourant.Name}|`
#Filtre les autorisations
? { $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow}|`
#Filtre les droits recherché
? { ($_.FileSystemRights -eq [System.Security.AccessControl.FileSystemRights]::FullControl) -or
($_.FileSystemRights -eq [System.Security.AccessControl.FileSystemRights]::Write)
}).count -gt 0
Write-host \"Autorisation sur `\"$DirName`\" = $isEcritureAutorisé\"
#Liste des droits
#http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesystemrights(VS.80).aspx
[/code:1]
C'est à adpater pour un fichier, $Dirname, et controle si les droits recherchés sont bien ceux précisé ici.
Le mieux serait de le paramètrer mais là je n'ai pas le temps.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
- Messages : 260
- Remerciements reçus 0
Effectivement gla, il faut regarder les acl de ton fichier avec un simple Get-Acl
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gérard Langlois
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 5
- Remerciements reçus 0
J'apporte 2 petites modifications:
- correction sur le nom d'une variable
- caster en tableau le ou les items retournés afin que le \"count\" fonctionne en cas de retour d'un seul item qui serai alors considéré comme un scalaire
[code:1]
#Récupère les infos du compte courant
$CompteCourant=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$DirName=\"C:\System Volume Information\"
#Recherche si le compte courant à les droits Fullcontrol ou Write sur le répertoire $DirName
#Récupère les droits du fichier
$isEcritureAutorisé=(@((get-acl $DirName).access|`
#Filtre le compte courant
? {$_.IdentityReference -eq $CompteCourant.Name}|`
#Filtre les autorisations
? { $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow}|`
#Filtre les droits recherché
? { ($_.FileSystemRights -eq [System.Security.AccessControl.FileSystemRights]::FullControl) -or
($_.FileSystemRights -eq [System.Security.AccessControl.FileSystemRights]::Write)
})).count -gt 0
Write-host \"Autorisation sur `\"$DirName`\" = $isEcritureAutorisé\"
#Liste des droits
#http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesystemrights(VS.80).aspx
[/code:1]
Ensuite j'apporte plusieurs bémols:
- l'utilisateur du scripts doit être explicitement ajouté dans les acls du fichier, car ici on ne prend pas en compte les groupes => il faut rajouter une section ou l'on cherche le groupe de l'utilisateur et les droits du groupe sur le fichier
- l'attribut \"lecteur seule\" du fichier n'est pas non plus pris en compte
affaire à suivre
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Oui tu as raison. J'ai fait ça rapidement et je n'ai pas tout testé, faut partager le travail- caster en tableau le ou les items retournés afin que le \"count\"
gla écrit:
Oui tout à fait.Ensuite j'apporte plusieurs bémols:
- l'utilisateur du scripts doit être explicitement ajouté dans les acls du fichier, car ici on ne prend pas en compte les groupes => il faut rajouter une section ou l'on cherche le groupe de l'utilisateur et les droits du groupe sur le fichier
gla écrit:
Oui ici aussi tu as raison bien que dans ton premier post tu parles de droits sur un fichier, je ne considére pas un attribut de fichier comme un droit.- l'attribut \"lecteur seule\" du fichier n'est pas non plus pris en compte
Si tu souhaites savoir si une opération d'écriture est possible sur un fichier donné, ce qui n'est plus la même chose car le contrôle des droits est dans ce cas un des points à vérifier, il reste à tester d'autres cas de figure : verrouillage exclusif sur le fichier, accés sur une drive en R/O ( CD/DVD),...
Ensuite il reste une approche basique autour des exceptions, On écrit dans le fichier si aucune exception n'est levée, hé bien on a pu le faire
Reste à savoir dans ce cas s'il est important de connaître la raison en cas d'échec.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gérard Langlois
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 5
- Remerciements reçus 0
Ensuite il reste une approche basique autour des exceptions, On écrit dans le fichier si aucune exception n'est levée, hé bien on a pu le faire
Reste à savoir dans ce cas s'il est important de connaître la raison en cas d'échec.
C'est la solution de contournement que j'ai pris
Je posterai ici une mise à jour du code si jamais je prends le temps d'implémenter la solution propre
En tout cas merci pour ton aide
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Tester le droit d'écriture sur un fichier (Résolu)