Question [Fonction]Validation de nom de fichier

Plus d'informations
il y a 11 ans 11 mois #11838 par Laurent Dardenne
Voici deux fonctions de validation de nom de fichier :
[code:1]
Function Test-InvalidFileNameChars{
#Test si un caractère est autorisé dans un nom de fichier
param ([char] $C)
#On n'autorise pas la saisie de caractères interdits dans un nom de fichier.
$Pattern = \"[{0}]\" -f ([Regex]::Escape([String] [System.IO.Path]::GetInvalidFileNameChars() ))
Return -Not ($_.KeyChar -Match $Pattern)
#\"Le caractère '$($matches[0])' est interdit dans un nom de fichier.\"
}

function Test-ValidFileName{
#Test un nom de fichier n'est pas un nom de device ou un chemin relatif
param( $FileName)
$Pattern =\"^(PRN|AUX|CLOCK\`$|NUL|CON|COM\d|LPT\d|\..*)$\"
Return -not ($FileName -Match $Pattern)
#\"Le nom de fichier '$FName' est interdit, car c'est soit un chemin relatif soit un nom de device réservé (Prn, Aux,Nul,...).\"
}
[/code:1]
A utiliser le plus souvent lors d'une saisie (read-host ou avec un composant GUI).
Voir aussi les autres membres de la classe Path :
[code:1]
[System.IO.Path].GetMembers()|select name
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 10 mois #11856 par SiSMik
Merci pour la découverte de cette classe.
ça serait cool de pouvoir intégrer ces tests directement dans la déclaration des paramètres de fonctions/scripts.

[code:1]Function Test-InvalidFileNameChars{
#Test si un caractère est autorisé dans un nom de fichier
param ([char] $C)
#On n'autorise pas la saisie de caractères interdits dans un nom de fichier.
$Pattern = \"[{0}]\" -f ([Regex]::Escape([String] [System.IO.Path]::GetInvalidFileNameChars() ))
Return -Not ($_.KeyChar -Match $Pattern)
#\"Le caractère '$($matches[0])' est interdit dans un nom de fichier.\"
}

function blahblah {
param( [Parameter(Position=0,Mandatory=$false,ValueFromPipeline=$true)]
[ValidateScript({Test-InvalidFileNameChars $_ })]
[Xml]$XMLFile
)
[...]
}[/code:1]

Je vais tester ça quand j'aurais un peu de temps :)<br><br>Message édité par: benduru, à: 22/05/12 23:27

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

Plus d'informations
il y a 11 ans 10 mois #11861 par Laurent Dardenne
benduru écrit:

ça serait cool de pouvoir intégrer ces tests directement dans la déclaration des paramètres de fonctions/scripts.

Soit tu crées une classe C# d'attribut de validation soit tu utilises une approche basée sur une fonction ou un module , dans tout les cas il te faudra charger la solution choisie en tant que prérequis.

Le post cité ne contient pas la dernière version du module, je la poste dés que je peux.

Tutoriels PowerShell

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

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