In questo articolo approfondiremo quanto già visto nell'articolo Windows Quick Tip: Visualizzare informazioni su un file WIM (Windows Imaging) mostrando come utilizzare DISM e PowerShell per scoprire quali versioni, edizioni, build, language pack di Windows sono presenti all'interno di un file ISO o WIM. Se il nome di un file ISO (o il nome del supporto di installazione) non contiene una versione e una build, è difficile sapere quale versione di Windows contiene. In questi casi è possibile montare il file ISO contenente l'immagine di installazione di Windows e recuperare tali informazioni dal file install.wim.
Una volta montato il file ISO (o inserito il supporto di installazione) accedere alla cartella sources e individuare il file di installazione contenente l'immagine di Windows. Il file si chiama install e può avere una delle seguenti estensioni:
- install.wim. WIM è un formato standard di immagine di installazione di Windows.
- install.esd. ESD è un file immagine compresso.
- install.swm. SWM viene utilizzato se si desidera dividere un'immagine WIM di grandi dimensioni in più file di dimensioni non superiori a 4 GB, in modo da inserirli nel file system FAT32 se si crea una chiavetta USB di installazione.
Prendere nota del nome del file e del suo percorso, avviare il prompt dei comandi come amministratore ed eseguire il seguente comando
DISM /Get-WimInfo /WimFile:"X:\sources\install.wim"
sostituendo X:\sources\Install.wim con nome del file, comprensivo del percorso, individuato in precedenza.
Verranno visualizzate le informazioni relative alla versione di Windows contenuta nel file. Nel caso si tratti di un ISO multi-edition, verrà visualizzato un elenco delle edizioni disponibili (Education, Home, Enterprise, Pro, ecc.) come mostrato in FIG 1.
Ogni edizione è contrassegnata da un indice utilizzabile per ottenere informazioni più dettagliate. Per visualizzare maggiori informazioni (come build e lingue disponibili) su un'edizione specifica presente in elenco, è possibile indicarla tramite l'indice e l'opzione /index aggiunta al comando DISM visto in precedenza. Ad esempio, per visualizzare le informazioni sull'edizione contrassegnata dall'indice 5, basterà eseguire il comando
DISM /Get-WimInfo /WimFile:"X:\Sources\Install.wim" /index:5
FIG 2 - DISM multi-edition, index |
L'operazione sopra descritta può essere automatizzata tramite un semplice script PowerShell
#Indicare il file ISO contenente l'immagine di Windows (ad es. d:\win.iso)
$imagePath = (Read-Host -Prompt "Indicare il file ISO contenente l'immagine di Windows")
#Verifico se il file indicato esiste
If (Test-Path -Path $imagePath){
#Se il file esiste provo a montarlo
$mountResult = Mount-DiskImage $imagePath -PassThru
#Recupero la lettera di unità con cui viene identificata l'immagine montata
$driveLetter = "$(($mountResult | Get-Volume).DriveLetter):"
#Visualizzo le versioni di Windows contenute nel file install.wim
Get-WindowsImage -ImagePath "$driveLetter\sources\install.wim"
#Esegue l'unmount dell'immagine
Dismount-DiskImage $mountResult.ImagePath
}
else{
#Il file specificato non è stato trovato
write-host("Il file specificato non esiste!")
}
Con alcune modifiche possiamo generare un report che visualizza i dettagli di ciascuna edizione di Windows presente nell'immagine
$Report = @()
#Indicare il file ISO contenente l'immagine di Windows (ad es. d:\win.iso)
$imagePath = (Read-Host -Prompt "Indicare il file ISO contenente l'immagine di Windows")
#Verifico se il file indicato esiste
If (Test-Path -Path $imagePath){
#Se il file esiste provo a montarlo
$mountResult = Mount-DiskImage $imagePath -PassThru
#Recupero la lettera di unità con cui viene identificata l'immagine montata
$driveLetter = "$(($mountResult | Get-Volume).DriveLetter):"
#Visualizzo le versioni di Windows contenute nel file install.wim
$WinImages = Get-WindowsImage -ImagePath "$driveLetter\sources\install.wim"
#Per ogni edizione di Windows contenuta nell'immagine
Foreach ($WinImage in $WinImages){
#Recupera informazioni da inserire nel report
$curImage=Get-WindowsImage -ImagePath "$driveLetter\sources\install.wim" -Index $WinImage.ImageIndex
$objImage = [PSCustomObject]@{
ImageIndex = $curImage.ImageIndex
ImageName = $curImage.ImageName
Version = $curImage.Version
Languages=$curImage.Languages
Architecture =$curImage.Architecture
}
$Report += $objImage
}
#Esegue l'unmount dell'immagine
Dismount-DiskImage $mountResult.ImagePath
#Visualizza il report
$Report | Out-GridView
}
else{
#Il file specificato non è stato trovato
write-host("Il file specificato non esiste!")
}
FIG 4 - Report edizioni di Windows contenute nell'immagine |