Question Tester le droit d'écriture sur un fichier (Résolu)

Plus d'informations
il y a 17 ans 3 mois #3294 par Gérard Langlois
Bonjour,

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.

Plus d'informations
il y a 17 ans 3 mois #3302 par Laurent Dardenne
Salut,
l'approche sur un répertoire :
[code:1]
#Récupère les infos du compte courant
$CompteCourant=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$DirName=\&quot;C:\System Volume Information\&quot;
#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 \&quot;Autorisation sur `\&quot;$DirName`\&quot; = $isEcritureAutorisé\&quot;
#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.

Plus d'informations
il y a 17 ans 3 mois #3308 par Robin Lemesle
Pas vu le doublon :blink:

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.

Plus d'informations
il y a 17 ans 3 mois #3309 par Gérard Langlois
Merci pour ce code ;-).
J'apporte 2 petites modifications:
- correction sur le nom d'une variable
- caster en tableau le ou les items retournés afin que le \&quot;count\&quot; 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=\&quot;C:\System Volume Information\&quot;
#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 \&quot;Autorisation sur `\&quot;$DirName`\&quot; = $isEcritureAutorisé\&quot;
#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 =&gt; il faut rajouter une section ou l'on cherche le groupe de l'utilisateur et les droits du groupe sur le fichier
- l'attribut \&quot;lecteur seule\&quot; du fichier n'est pas non plus pris en compte

affaire à suivre ;-)

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

Plus d'informations
il y a 17 ans 3 mois #3310 par Laurent Dardenne
gla écrit:

- caster en tableau le ou les items retournés afin que le \&quot;count\&quot;

Oui tu as raison. J'ai fait ça rapidement et je n'ai pas tout testé, faut partager le travail ;-)
gla écrit:

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 =&gt; il faut rajouter une section ou l'on cherche le groupe de l'utilisateur et les droits du groupe sur le fichier

Oui tout à fait.
gla écrit:

- l'attribut \&quot;lecteur seule\&quot; du fichier n'est pas non plus pris en compte

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.
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 :lol:
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.

Plus d'informations
il y a 17 ans 3 mois #3312 par Gérard Langlois
Laurent Dardenne écrit:

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 :lol:
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.

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