PowerShell : script pour encoding de fichier sql sous forme de fonction filtre
Pour ceux qui utiliseraient le petit script que j'avais intégré la dernière fois à mon post "SQL Server : Outil osql : attention à l'encoding des fichiers de scripts SQL...", j'ai en fin de compte crée une fonction filtre, c'est plus pratique.
Les fonctions filtres sont utiles pour travailler avec le pipeline sans pour autant écrire une cmdlet.
Elles ont la forme suivante (seul le bloc PROCESS est obligatoire) :
function nom
{
BEGIN
{
# CODE
# Ce code sera executé au début du traitement, avant le premier appel au bloc PROCESS.
}
PROCESS
{
# CODE
# Ce code sera executé pour chaque objet du pipeline.
}
END
{
# CODE
# Ce code sera executé à la fin du traitement, après le dernier appel au bloc PROCESS.
}
}
Dans notre cas, nous voulons executer le test sur le fichier courant, représenté par la variable $_, et nous écrivons sur le pipeline les objets ne correspondant pas au critères requis :
function Check-UTF16LEEncoding
{
PROCESS
{
$reader=$_.OpenRead()
if ( $reader.Length -lt 2 -or ( $reader.ReadByte() -ne 0xFF -or $reader.ReadByte() -ne 0xFE ) )
{
Write-Output $_
}
$reader.Close()
}
}
A utiliser tel quel ou à ajouter à votre profil, si vous en faites un usage intensif.
C'est quand même plus sympa à utiliser :
PS C:\sql
PS> dir -filter *.sql -recurse | Check-UTF16LEEncoding
Directory: Microsoft.PowerShell.Core\FileSystem::C:\sql\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 02/08/2007 23:01 91 1252.sql
-a--- 02/08/2007 23:01 91 850.sql
-a--- 02/08/2007 22:16 184 UTF16BE.sql
PS C:\sql
PS> dir -filter *.sql -recurse | Check-UTF16LEEncoding | foreach { $_.FullName }
C:\sql\test\1252.sql
C:\sql\test\850.sql
C:\sql\test\UTF16BE.sql
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :