Desarrollé este script para evitar tener que recurrir a software de terceros (ej. ImDisk) en escenarios donde necesito automatizar el montaje de archivos ISO, sin interacción humana y sin dependencias externas.
El script no tiene parámetros configurables. El archivo ISO a montar y desmontar está establecido directamente en el código fuente, en la siguiente línea:
Código:
$isoPath = Join-Path $PSScriptRoot "CD-ROM.iso"
Si se requiere que el script no interrumpa, solo hay que comentar las dos líneas que llaman a las funciones Confirm-Continue y Show-GoodbyeScreen:
Código
... Show-WelcomeScreen # Confirm-Continue Mount-ISO # Show-GoodbyeScreen
Mount virtual drive.ps1

Código
<#PSScriptInfo .VERSION 1.0 .GUID 14688e75-298c-1112-a2d0-1234567890aa .AUTHOR ElektroStudios .COMPANYNAME ElektroStudios .COPYRIGHT ElektroStudios © 2025 #> <# =========================================================================================== | | | Variables | | | =========================================================================================== #> $isoPath = Join-Path $PSScriptRoot "CD-ROM.iso" <# =========================================================================================== | | | Functions | | | =========================================================================================== #> function Show-WelcomeScreen { Clear-Host Write-Host "" Write-Host " $($host.ui.RawUI.WindowTitle)" Write-Host " +==================================================+" Write-Host " | |" Write-Host " | This script will mount a virtual drive with the |" Write-Host " | ISO file of the specified path. |" Write-Host " | |" Write-Host " +=================================================+" Write-Host "" Write-Host " Script Settings " -ForegroundColor DarkGray Write-Host " ===========================" -ForegroundColor DarkGray Write-Host " ISO File: $([System.IO.Path]::GetFullPath($isoPath))" -ForegroundColor Gray Write-Host "" } function Confirm-Continue { Write-Host " Press 'Y' key to continue or 'N' to exit." Write-Host "" Write-Host " -Continue? (Y/N)" do { $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") $char = $key.Character.ToString().ToUpper() if ($char -ne "Y" -and $char -ne "N") { [console]::beep(1500, 500) } } while ($char -ne "Y" -and $char -ne "N") } function Mount-ISO { if (Test-Path $isoPath) { try { $fullPath = (Resolve-Path $isoPath).Path $alreadyMounted = $null try { $alreadyMounted = Get-DiskImage -ImagePath $fullPath -ErrorAction Stop } catch { } if ($alreadyMounted -and $alreadyMounted.Attached) { Write-Host "ISO is already mounted. Skipping mount." -ForegroundColor Cyan } else { try { Write-Host "Virtual drive has been mounted successfully." -ForegroundColor Green } catch { Write-Host "Error while mounting the ISO:" -ForegroundColor Red Write-Host $_.Exception.Message -ForegroundColor Yellow } } } catch { Write-Host "Failed to mount the virtual drive." -ForegroundColor Red Write-Host $_.Exception.Message -ForegroundColor Yellow } } else { Write-Warning "ISO file not found at: $isoPath" } } function Show-GoodbyeScreen { Write-Host "Operation Completed!" -BackgroundColor Black -ForegroundColor Green Write-Host "" Write-Host "Press any key to exit..." $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown") } <# =========================================================================================== | | | Main | | | =========================================================================================== #> #[System.Console]::SetWindowSize(150, 45) [CultureInfo]::CurrentUICulture = "en-US" try { Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Scope "Process" } catch { } Show-WelcomeScreen Confirm-Continue Mount-ISO Show-GoodbyeScreen
Dismount virtual drive.ps1

Código
<#PSScriptInfo .VERSION 1.0 .GUID 14688e75-298c-1112-a2d0-1234567890ab .AUTHOR ElektroStudios .COMPANYNAME ElektroStudios .COPYRIGHT ElektroStudios © 2025 #> <# =========================================================================================== | | | Variables | | | =========================================================================================== #> $isoPath = Join-Path $PSScriptRoot "CD-ROM.iso" <# =========================================================================================== | | | Functions | | | =========================================================================================== #> function Show-WelcomeScreen { Clear-Host Write-Host "" Write-Host " $($host.ui.RawUI.WindowTitle)" Write-Host " +======================================================+" Write-Host " | |" Write-Host " | This script will dismount a virtual drive previously |" Write-Host " | mounted with the ISO file of the specified path. |" Write-Host " | |" Write-Host " +======================================================+" Write-Host "" Write-Host " Script Settings " -ForegroundColor DarkGray Write-Host " ===========================" -ForegroundColor DarkGray Write-Host " ISO File: $([System.IO.Path]::GetFullPath($isoPath))" -ForegroundColor Gray Write-Host "" } function Confirm-Continue { Write-Host " Press 'Y' key to continue or 'N' to exit." Write-Host "" Write-Host " -Continue? (Y/N)" do { $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") $char = $key.Character.ToString().ToUpper() if ($char -ne "Y" -and $char -ne "N") { [console]::beep(1500, 500) } } while ($char -ne "Y" -and $char -ne "N") } function Dismount-ISO { if (Test-Path $isoPath) { try { $fullPath = (Resolve-Path $isoPath).Path $alreadyMounted = $null try { $alreadyMounted = Get-DiskImage -ImagePath $fullPath -ErrorAction Stop } catch { } if ($alreadyMounted -and $alreadyMounted.Attached) { try { Dismount-DiskImage -ImagePath $fullPath -ErrorAction Stop Write-Host "Virtual drive has been dismounted successfully." -ForegroundColor Green } catch { Write-Host "Error while dismounting the virtual drive:" -ForegroundColor Red Write-Host $_.Exception.Message -ForegroundColor Yellow } } else { Write-Host "No virtual drive mounted for this ISO. Nothing to dismount." -ForegroundColor Cyan } } catch { Write-Host "Failed to dismount the virtual drive." -ForegroundColor Red Write-Host $_.Exception.Message -ForegroundColor Yellow } } else { Write-Warning "ISO file not found at: $isoPath" } } function Show-GoodbyeScreen { Write-Host "Operation Completed!" -BackgroundColor Black -ForegroundColor Green Write-Host "" Write-Host "Press any key to exit..." $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown") } <# =========================================================================================== | | | Main | | | =========================================================================================== #> #[System.Console]::SetWindowSize(150, 45) [CultureInfo]::CurrentUICulture = "en-US" try { Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Scope "Process" } catch { } Show-WelcomeScreen Confirm-Continue Dismount-ISO Show-GoodbyeScreen