Created
April 11, 2024 02:13
-
-
Save Fred-Vatin/43cf369674d480f9da9f145d74699dbb to your computer and use it in GitHub Desktop.
WinIsoInfo : get Windows Image info [french]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#requires -RunAsAdministrator | |
#region begin Usage | |
# Résumé | |
# ====== | |
# Obtient des infos sur les ISO d'installation de Windows telles que leur version détaillée | |
# Syntaxe | |
# ======= | |
# WinIsoInfo [-Path] <String[]> | |
# Exemples | |
# ======== | |
# PS C:\> WinIsoInfo | |
# (la commande invoquée seule vous demandera le chemin vers l'ISO) | |
# ou bien passer le chemin directement en argument tel que: | |
# PS C:\> WinIsoInfo -Path "E:\Win 10\Installation\ISO\Windows 10 x64 fr.iso" | |
# Vous pouvez rediriger la sortie de la commande dans un fichier plutôt que dans la console telle que: | |
# PS C:\> WinIsoInfo -Path "E:\Win 10\Installation\ISO\Windows 10 x64 fr.iso" | Out-File c:\scripts\test.txt -width 255 | |
# Dans ce cas l'argument [-Path] est requis. | |
#endregion Usage | |
$Path = $args[0] | |
function WinIsoInfo { | |
[cmdletbinding()] | |
Param([string]$Path) | |
Process { | |
#region begin Formatage du titre | |
$Space = 19 | |
$TitleL1 = "INFORMATIONS DÉTAILLÉES SUR LE FICHIER ISO" | |
$TitleL2 = "D'INSTALLATION WINDOWS" | |
$TitleRef = " " * $Space + $TitleL1 + " " * $Space | |
$ExtraLine = $TitleRef.Length | |
$TitleDiff = $TitleRef.Length - $TitleL2.Length | |
$Title = $TitleRef + "`n" + " " * ($TitleDiff / 2) + $TitleL2 + " " * ($TitleDiff / 2) | |
$Title = "`n" + " " * $ExtraLine + "`n" + $Title + "`n" + " " * $ExtraLine | |
Write-Host -BackgroundColor DarkGreen -ForegroundColor Green $Title | |
#endregion | |
#region begin Traitement ISO parameter | |
# Si l'utisateur utilise la fonction sans préciser l'iso, alors lui demander d'entrer le chemin | |
if (!$Path) { | |
Write-Host -ForegroundColor Green "`n `n`tVeuillez entrer ci-dessous le chemin de l'ISO d'installation de Windows:" | |
$Path = Read-Host "`t`n`tTapez [ENTRÉE] pour valider" | |
# Tester la validité du chemin entrée (il doit exister et avoir l'extension ISO) | |
#cls | |
If (($Path -like '*.iso') -and (Test-Path -PathType Leaf -LiteralPath $Path)) { | |
Write-Host -ForegroundColor Green "`n `n`tFichier ISO à examiner :" | |
Write-Host -ForegroundColor Cyan "`n`t`"$Path`"`n" | |
} | |
else { | |
# s'il est invalide, arrêter le script | |
Write-Host -BackgroundColor Red -ForegroundColor Yellow "`n`tLe chemin entré est invalide :`t`t`t`t`t" | |
Write-Host -ForegroundColor Cyan "`n`t`"$Path`"" | |
Write-Host -BackgroundColor Red -ForegroundColor Yellow "`n`tIl doit pointer vers un fichier ISO existant. `t`n`tVeuillez relancer le script manuellement.`t`t`n" | |
Break | |
} | |
} | |
# Si le chemin était passé en paramètre, tester la validité du chemin entrée (il doit exister et avoir l'extension ISO) | |
else { | |
#cls | |
If (($Path -like '*.iso') -and (Test-Path -PathType Leaf -LiteralPath $Path)) { | |
Write-Host -ForegroundColor Green "`n `n`tFichier ISO à examiner :" | |
Write-Host -ForegroundColor Cyan "`n`t`"$Path`"`n" | |
} | |
else { | |
# s'il est invalide, demander à l'utilisateur de l'entrer manuellement | |
Write-Host -BackgroundColor Red -ForegroundColor Yellow "`n`n`n`t`t`tLe chemin passé en paramètre de -iso est invalide :`t`t`t`t`t" | |
Write-Host -ForegroundColor Green "`n`tVeuillez entrer ci-dessous le chemin de l'ISO d'installation de Windows:" | |
$Path = Read-Host "`t`n`tTapez [ENTRÉE] pour valider" | |
# Tester la validité du chemin entrée (il doit exister et avoir l'extension ISO) | |
Clear-Host | |
If (($Path -like '*.iso') -and (Test-Path -PathType Leaf -LiteralPath $Path)) { | |
Write-Host -ForegroundColor Green "`n `n`tFichier ISO à examiner :" | |
Write-Host -ForegroundColor Cyan "`n`t`"$Path`"`n" | |
} | |
else { | |
# s'il est invalide, arrêter le script | |
Write-Host -BackgroundColor Red -ForegroundColor Yellow "`n`tLe chemin entré est invalide :`t`t`t`t`t" | |
Write-Host -ForegroundColor Cyan "`n`t`"$Path`"" | |
Write-Host -BackgroundColor Red -ForegroundColor Yellow "`n`tIl doit pointer vers un fichier ISO existant. `t`n`tVeuillez relancer le script manuellement.`t`t`n" | |
Break | |
} | |
} | |
} | |
#endregion | |
#region begin Traitement de l'image ISO | |
# On monte l'image | |
Mount-DiskImage -ImagePath "$Path" | |
$ISOmount = Get-DiskImage $Path | |
# Si l'ISO ne peut être monté, fin du script | |
if ($ISOmount.Attached -ne "True") { throw "Impossible de monter le fichier ISO" } | |
# Récupérer la lettre du volume où l'image est montée | |
$ISOdriveLetter = (Get-Volume -DiskImage $ISOmount).DriveLetter | |
$wimPath = $ISOdriveLetter + ":" | |
# On en déduit le chemin complet vers l'image wim à traiter dont le traitement varie selon le type | |
Switch ($wimPath) { | |
{ (Test-Path "$wimPath\sources\install.wim") -or (Test-Path "$wimPath\sources\install.esd") } { | |
if (Test-Path "$wimPath\sources\install.wim") { | |
$wimPath = "$wimPath\sources\install.wim" | |
} | |
else { $wimPath = "$wimPath\sources\install.esd" } | |
Write-Host -ForegroundColor Green "`n`tImage détectée dans l'ISO :" | |
Write-Host -ForegroundColor Cyan "`n`t$wimPath" | |
Write-Host -ForegroundColor Green "`n `n`tContenu de l'ISO :" | |
$ImgInfo = DISM.exe /Get-WimInfo /WimFile:$wimPath | |
$ImgInfo # affichage des versions contenues dans l'image | |
# Pour chaque version trouvée dans l'image, afficher ses détails | |
Write-Host -ForegroundColor Green "`n `n`tDétails des installations possibles :" | |
$count = 0 | |
Foreach ($item in $ImgInfo) { | |
# parcourt chaque ligne retournée par "DISM.exe /Get-ImageInfo /ImageFile:$wimPath" | |
if ($item.indexof("Index") -eq 0 ) { | |
# dès que le mot "Index" est trouvé en début de ligne… | |
$count ++ # on incrémente $count et on affiche les détails de chaque version de windows | |
DISM.exe /Get-WimInfo /WimFile:$wimPath /index:$count | |
Write-Host -ForegroundColor Green $("`n" + "=" * 80) | |
} | |
} | |
#Write-Host -ForegroundColor Green "`n`count : $Count" | |
break | |
} | |
{ (Test-Path "$wimPath\x86\sources\install.esd") -or (Test-Path "$wimPath\x86\sources\install.wim") } { | |
if (Test-Path "$wimPath\x86\sources\install.esd") { | |
$wimPath86 = "$wimPath\x86\sources\install.esd" | |
$wimPath64 = "$wimPath\x64\sources\install.esd" | |
} | |
else { $wimPath86 = "$wimPath\sources\install.wim"; $wimPath64 = "$wimPath\x64\sources\install.wim" } | |
Write-Host -ForegroundColor Magenta "`n`tCette installation contient les variantes x86 et x64`n`n" | |
Write-Host -ForegroundColor Green "`n`tImage X86 détectée dans l'ISO :" | |
Write-Host -ForegroundColor Cyan "`n`t$wimPath86" | |
Write-Host -ForegroundColor Green "`n `n`tContenu de l'ISO :" | |
$ImgInfo = DISM.exe /Get-WimInfo /WimFile:$wimPath86 | |
$ImgInfo # affichage des versions contenues dans l'image | |
# Pour chaque version trouvée dans l'image, afficher ses détails | |
Write-Host -ForegroundColor Green "`n `n`tDétails des installations possibles :" | |
$count = 0 | |
Foreach ($item in $ImgInfo) { | |
# parcourt chaque ligne retournée par "DISM.exe /Get-ImageInfo /ImageFile:$wimPath" | |
if ($item.indexof("Index") -eq 0 ) { | |
# dès que le mot "Index" est trouvé en début de ligne… | |
$count ++ # on incrémente $count et on affiche les détails de chaque version de windows | |
DISM.exe /Get-WimInfo /WimFile:$wimPath86 /index:$count | |
Write-Host -ForegroundColor Green $("`n" + "=" * 80) | |
} | |
} | |
Write-Host -ForegroundColor Green "`n`tImage X64 détectée dans l'ISO :" | |
Write-Host -ForegroundColor Cyan "`n`t$wimPath64" | |
Write-Host -ForegroundColor Green "`n `n`tContenu de l'ISO :" | |
$ImgInfo = DISM.exe /Get-WimInfo /WimFile:$wimPath64 | |
$ImgInfo # affichage des versions contenues dans l'image | |
# Pour chaque version trouvée dans l'image, afficher ses détails | |
Write-Host -ForegroundColor Green "`n `n`tDétails des installations possibles :" | |
$count = 0 | |
Foreach ($item in $ImgInfo) { | |
# parcourt chaque ligne retournée par "DISM.exe /Get-ImageInfo /ImageFile:$wimPath" | |
if ($item.indexof("Index") -eq 0 ) { | |
# dès que le mot "Index" est trouvé en début de ligne… | |
$count ++ # on incrémente $count et on affiche les détails de chaque version de windows | |
DISM.exe /Get-WimInfo /WimFile:$wimPath64 /index:$count | |
Write-Host -ForegroundColor Green $("`n" + "=" * 80) | |
} | |
} | |
break | |
} | |
default { Write-Host "Aucune image valide trouvée dans l'ISO" } | |
} | |
# On peut démonter l'image | |
Dismount-DiskImage -ImagePath "$Path" | |
# Message de fin de traitement | |
$EndMsg = "TRAITEMENT TERMINÉ" | |
$EndMsgDiff = $TitleRef.Length - $EndMsg.Length | |
$EndMsg = " " * ($EndMsgDiff / 2) + $EndMsg + " " * ($EndMsgDiff / 2) | |
$EndMsg = "`n" + " " * $ExtraLine + "`n" + $EndMsg + "`n" + " " * $ExtraLine | |
Write-Host -BackgroundColor DarkGreen -ForegroundColor Green $EndMsg | |
#endregion | |
} | |
} # End Function | |
WinIsoInfo |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment