1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| <#
Script powershell permettant de comparer les fichiers présents dans le dossier de dépôt et
les expressions régulières présentes dans la description des données d'un fichier Excel
#>
cls #efface l'écran de la fenêtre de commande
$Date = Get-Date -Format "dddd dd/MM/yyyy HH:mm"
$host.UI.RawUI.WindowTitle = "Comparaison par analyse du dossier de dépôt avec la description des données [$Date]" #Titre de la fenêtre de commande qui s'affiche à l'exécution du script + date et heure
try #bloc try-catch : try = instruction surveillant une erreur ; catch = si erreur dans try renvoie à catch
{
$scriptPath = Split-Path -Parent $PSCommandPath #variable fractionnant le chemin où se situe le script depuis le chemin absolu jusqu'au dossier parent du script
Add-Type -path "$scriptPath\EPPlus.dll" #utilise la librairie située au chemin spécifié. Cette librairie permet de manipuler des fichiers Excel en Powershell
}
catch
{
Write-Host "Erreur : Impossible de charger la librairie EPPlus.dll"
Read-Host
exit 1
}
$excel_filename = [string](Read-Host "Description des données : Glisser-déposer la description des données ici ") #nom du fichier Excel avec extension nécessaire contenant la description des données
$excel_filename = $excel_filename.Replace('"', "")
try #bloc try-catch : try = instruction surveillant une erreur ; catch = si erreur dans try renvoie à catch
{
$f = Get-Item -LiteralPath $excel_filename -ErrorAction Stop #obtient un objet "FileInfo" du fichier Excel, si impossible alors erreur
$obj = New-Object OfficeOpenXml.ExcelPackage $f #charge le fichier Excel via Powershell grâce à la librairie Epplus (ne nécessite pas l'application Excel d'installée)
$regexps = $obj.Workbook.Worksheets[4].Cells["E6:E300"] | Select-Object -ExpandProperty Text | Where-Object {$_ -ne ""} #la feuille 4 caractéristiques techniques est analysée, le texte des cellules dans la plage E6:E300 est sélectionné en appliquant un filtre de recherche où les valeurs ne sont pas égales à aucune valeur
}
catch
{
Write-Host "Erreur : Chargement impossible du fichier excel $excel_filename"
Read-Host
exit 1
}
$dossier_name = [string](Read-Host "Glisser-déposer le dossier à analyser")
$dossier_name = $dossier_name.Replace('"', "").TrimEnd('\') #remise en forme avec suppression de tous les " et des \ de fin
Write-Host ""
if (!(Test-Path -LiteralPath $dossier_name -PathType Container)) #vérifie si le dossier n'existe pas
{
Write-Host "Erreur : Le dossier n'existe pas"
Read-Host
exit 1
}
$filenames = Get-ChildItem -Path $dossier_name -File -Force | Select-Object -ExpandProperty Name #recupère la liste des fichiers du dossier
$file_ok = 0
$file_ko = 0
foreach($filename in $filenames) #pour chaque fichier
{
Write-Host "Analyse : Fichier : $filename"
$find_regexp = $null
foreach($regexp in $regexps) #pour chaque regexp
{
if ($filename -match $regexp) #si le fichier correspond à la regexp
{
$find_regexp = $regexp #indique dans la variable la correspondance
break #quitte la boucle des regexp
}
}
if ($find_regexp) #si correpondance il y a
{
$file_ok++ #incrémente le compteur des fichiers OK
Write-Host "Analyse : Regexp : $find_regexp"
Write-Host -ForegroundColor DarkGreen "Analyse : Correspondance entre fichier et Regexp ok`n"
}
else #sinon
{
$file_ko++ #incrémente le compteur des fichiers KO
Write-Host -ForegroundColor DarkRed "Analyse : Correspondance entre fichier et Regexp mauvaise`n"
}
}
Write-Host ""
Write-Host "Nombre total de RegExp dans la Description des données $([System.IO.Path]::GetFileName($excel_filename)) : " -NoNewline
Write-Host " $(@($regexps).Count)" -Foregroundcolor Blue
Write-Host "Nombre total de fichiers dans le dossier $([System.IO.Path]::GetFileName($dossier_name)) :" -NoNewline
Write-Host " $($file_ok + $file_ko)" -Foregroundcolor Blue
$delta_files = @($regexps).Count - $file_ok - $file_ko #calcule le delta entre le nombre de regexp et le nombre de fichier total
if ($delta_files -eq 0) #si le delta est égal à 0
{
Write-Host "Le nombre de fichiers est identique"
}
elseif ($delta_files -gt 0) #si il y a moins de fichiers que de regexp
{
Write-Host "Nombre de fichier(s) manquant(s) : " -NoNewline
Write-Host $delta_files -Foregroundcolor Darkred
}
else #sinon, si il y a plus de fichiers que de regexp
{
Write-Host "Nombre de fichier(s) excédent(s) : " -NoNewline
Write-Host ($delta_files * - 1) -Foregroundcolor Darkred
}
Write-Host "Nombre total de fichiers correspondants :" -NoNewline
Write-Host " $file_ok" -Foregroundcolor Darkgreen
Write-Host "Nombre total de fichiers ne correspondants pas :" -NoNewline
Write-Host " $file_ko" -Foregroundcolor Darkred
Write-Host "`n`nFin"
Read-Host |