Menú contextual clásico:
*Copiar el string en un .bat y ejecutar
Office Professional Plus 2021:
Instalador Office LTS:
Ejecutamos en powershell como admin – > irm https://aldagou.github.io/MSOI/MSOIGUI.ps1 | iex
My admin supertool:
Copiamos esto dentro de un .bat
<# : batch script
@echo off
chcp 65001 >nul
setlocal
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ([System.IO.File]::ReadAllText('%~f0', [System.Text.Encoding]::UTF8))"
exit /b
#>
# ==============================================================================
# Script: Win11 Express Setup Tool (GUI Nativa + DPI Fix + AutoSize)
# ==============================================================================
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# --- Soporte High DPI ---
[System.Windows.Forms.Application]::EnableVisualStyles()
try {
$dpiApi = Add-Type -MemberDefinition '[DllImport("user32.dll")] public static extern bool SetProcessDpiAwarenessContext(int dpiContext);' -Name 'DpiAware' -PassThru
$dpiApi::SetProcessDpiAwarenessContext(-4) | Out-Null
} catch {
try {
$dpiApiOld = Add-Type -MemberDefinition '[DllImport("user32.dll")] public static extern bool SetProcessDPIAware();' -Name 'DpiAwareOld' -PassThru
$dpiApiOld::SetProcessDPIAware() | Out-Null
} catch {}
}
# --- Ventana Principal ---
$form = New-Object System.Windows.Forms.Form
$form.Text = "Puesta en Marcha Express - Windows 11"
$form.Size = New-Object System.Drawing.Size(810, 780)
$form.StartPosition = "CenterScreen"
$form.FormBorderStyle = "FixedSingle"
$form.MaximizeBox = $false
$form.AutoScaleMode = [System.Windows.Forms.AutoScaleMode]::Dpi
$form.BackColor = [System.Drawing.Color]::FromArgb(243, 243, 243)
$fontTitle = New-Object System.Drawing.Font("Segoe UI", 10.5, [System.Drawing.FontStyle]::Bold)
$fontNormal = New-Object System.Drawing.Font("Segoe UI", 9, [System.Drawing.FontStyle]::Regular)
# ==============================================================================
# PANEL IZQUIERDO: Modificaciones de Sistema
# ==============================================================================
$grpTweaks = New-Object System.Windows.Forms.GroupBox
$grpTweaks.Text = " Modificaciones de Sistema "
$grpTweaks.Font = $fontTitle
$grpTweaks.Location = New-Object System.Drawing.Point(15, 10)
$grpTweaks.Size = New-Object System.Drawing.Size(375, 480)
# 1. UAC
$chkUAC = New-Object System.Windows.Forms.CheckBox
$chkUAC.Text = "UAC al mínimo (Sin notificaciones)"
$chkUAC.Font = $fontNormal; $chkUAC.Location = New-Object System.Drawing.Point(15, 25); $chkUAC.Size = New-Object System.Drawing.Size(345, 24); $chkUAC.Checked = $true
# 2. Habilitar Admin + Contraseña
$chkAdmin = New-Object System.Windows.Forms.CheckBox
$chkAdmin.Text = "Habilitar usuario Administrador"
$chkAdmin.Font = $fontNormal; $chkAdmin.Location = New-Object System.Drawing.Point(15, 52); $chkAdmin.Size = New-Object System.Drawing.Size(345, 24); $chkAdmin.Checked = $true
$lblPass1 = New-Object System.Windows.Forms.Label
$lblPass1.Text = "Contraseña:"; $lblPass1.Font = $fontNormal; $lblPass1.Location = New-Object System.Drawing.Point(35, 78); $lblPass1.Size = New-Object System.Drawing.Size(110, 20)
$txtPass1 = New-Object System.Windows.Forms.TextBox
$txtPass1.PasswordChar = '*'; $txtPass1.Location = New-Object System.Drawing.Point(150, 75); $txtPass1.Size = New-Object System.Drawing.Size(205, 22)
$lblPass2 = New-Object System.Windows.Forms.Label
$lblPass2.Text = "Confirmar:"; $lblPass2.Font = $fontNormal; $lblPass2.Location = New-Object System.Drawing.Point(35, 105); $lblPass2.Size = New-Object System.Drawing.Size(110, 20)
$txtPass2 = New-Object System.Windows.Forms.TextBox
$txtPass2.PasswordChar = '*'; $txtPass2.Location = New-Object System.Drawing.Point(150, 102); $txtPass2.Size = New-Object System.Drawing.Size(205, 22)
$chkAdmin.Add_CheckedChanged({
$txtPass1.Enabled = $chkAdmin.Checked
$txtPass2.Enabled = $chkAdmin.Checked
})
# 3. Cambiar Hostname
$chkHostname = New-Object System.Windows.Forms.CheckBox
$chkHostname.Text = "Cambiar nombre del equipo (Hostname)"
$chkHostname.Font = $fontNormal; $chkHostname.Location = New-Object System.Drawing.Point(15, 132); $chkHostname.Size = New-Object System.Drawing.Size(345, 24); $chkHostname.Checked = $false
$lblHostname = New-Object System.Windows.Forms.Label
$lblHostname.Text = "Nuevo Nombre:"; $lblHostname.Font = $fontNormal; $lblHostname.Location = New-Object System.Drawing.Point(35, 158); $lblHostname.Size = New-Object System.Drawing.Size(110, 20)
$txtHostname = New-Object System.Windows.Forms.TextBox
$txtHostname.Text = $env:COMPUTERNAME; $txtHostname.Location = New-Object System.Drawing.Point(150, 155); $txtHostname.Size = New-Object System.Drawing.Size(205, 22); $txtHostname.Enabled = $false
$chkHostname.Add_CheckedChanged({
$txtHostname.Enabled = $chkHostname.Checked
})
# 4. Tema del sistema
$lblTheme = New-Object System.Windows.Forms.Label
$lblTheme.Text = "Tema de Windows:"; $lblTheme.Font = $fontNormal; $lblTheme.Location = New-Object System.Drawing.Point(15, 188); $lblTheme.Size = New-Object System.Drawing.Size(130, 20)
$cmbTheme = New-Object System.Windows.Forms.ComboBox
$cmbTheme.DropDownStyle = "DropDownList"
[void]$cmbTheme.Items.AddRange(@("No cambiar", "Modo Oscuro", "Modo Claro"))
$cmbTheme.SelectedIndex = 1
$cmbTheme.Location = New-Object System.Drawing.Point(150, 185); $cmbTheme.Size = New-Object System.Drawing.Size(205, 22)
# 5. Resto de tweaks
$chkPower = New-Object System.Windows.Forms.CheckBox
$chkPower.Text = "Modo de Alto Rendimiento"; $chkPower.Font = $fontNormal; $chkPower.Location = New-Object System.Drawing.Point(15, 220); $chkPower.Size = New-Object System.Drawing.Size(345, 24); $chkPower.Checked = $true
$chkExt = New-Object System.Windows.Forms.CheckBox
$chkExt.Text = "Mostrar extensiones de los archivos"; $chkExt.Font = $fontNormal; $chkExt.Location = New-Object System.Drawing.Point(15, 250); $chkExt.Size = New-Object System.Drawing.Size(345, 24); $chkExt.Checked = $true
$chkThisPC = New-Object System.Windows.Forms.CheckBox
$chkThisPC.Text = "Abrir Explorer en 'Este Equipo' (Ocultar recientes)"; $chkThisPC.Font = $fontNormal; $chkThisPC.Location = New-Object System.Drawing.Point(15, 280); $chkThisPC.Size = New-Object System.Drawing.Size(345, 24); $chkThisPC.Checked = $true
$chkMenuClassic = New-Object System.Windows.Forms.CheckBox
$chkMenuClassic.Text = "Volver al Menú Contextual Clásico"; $chkMenuClassic.Font = $fontNormal; $chkMenuClassic.Location = New-Object System.Drawing.Point(15, 310); $chkMenuClassic.Size = New-Object System.Drawing.Size(345, 24); $chkMenuClassic.Checked = $true
$chkStartClean = New-Object System.Windows.Forms.CheckBox
$chkStartClean.Text = "Desactivar recomendaciones del Menú Inicio"; $chkStartClean.Font = $fontNormal; $chkStartClean.Location = New-Object System.Drawing.Point(15, 340); $chkStartClean.Size = New-Object System.Drawing.Size(345, 24); $chkStartClean.Checked = $true
$chkUnpinTaskbar = New-Object System.Windows.Forms.CheckBox
$chkUnpinTaskbar.Text = "Desanclar todas las apps de la Barra de Tareas"; $chkUnpinTaskbar.Font = $fontNormal; $chkUnpinTaskbar.Location = New-Object System.Drawing.Point(15, 370); $chkUnpinTaskbar.Size = New-Object System.Drawing.Size(345, 24); $chkUnpinTaskbar.Checked = $true
$grpTweaks.Controls.AddRange(@($chkUAC, $chkAdmin, $lblPass1, $txtPass1, $lblPass2, $txtPass2, $chkHostname, $lblHostname, $txtHostname, $lblTheme, $cmbTheme, $chkPower, $chkExt, $chkThisPC, $chkMenuClassic, $chkStartClean, $chkUnpinTaskbar))
# ==============================================================================
# PANEL DERECHO: Aplicaciones (Con anchos corregidos)
# ==============================================================================
$grpApps = New-Object System.Windows.Forms.GroupBox
$grpApps.Text = " Aplicaciones (Español) "
$grpApps.Font = $fontTitle
$grpApps.Location = New-Object System.Drawing.Point(405, 10)
$grpApps.Size = New-Object System.Drawing.Size(375, 480)
$chkVLC = New-Object System.Windows.Forms.CheckBox; $chkVLC.Text = "VLC Media Player"; $chkVLC.Font = $fontNormal; $chkVLC.Location = New-Object System.Drawing.Point(20, 30); $chkVLC.Size = New-Object System.Drawing.Size(340, 24); $chkVLC.Checked = $true
$chkWinRAR = New-Object System.Windows.Forms.CheckBox; $chkWinRAR.Text = "WinRAR"; $chkWinRAR.Font = $fontNormal; $chkWinRAR.Location = New-Object System.Drawing.Point(20, 65); $chkWinRAR.Size = New-Object System.Drawing.Size(340, 24); $chkWinRAR.Checked = $true
$chk7Zip = New-Object System.Windows.Forms.CheckBox; $chk7Zip.Text = "7-Zip"; $chk7Zip.Font = $fontNormal; $chk7Zip.Location = New-Object System.Drawing.Point(20, 100); $chk7Zip.Size = New-Object System.Drawing.Size(340, 24); $chk7Zip.Checked = $true
$chkOnlyOffice = New-Object System.Windows.Forms.CheckBox; $chkOnlyOffice.Text = "ONLYOFFICE Desktop Editors"; $chkOnlyOffice.Font = $fontNormal; $chkOnlyOffice.Location = New-Object System.Drawing.Point(20, 135); $chkOnlyOffice.Size = New-Object System.Drawing.Size(340, 24); $chkOnlyOffice.Checked = $true
$chkReader = New-Object System.Windows.Forms.CheckBox; $chkReader.Text = "Adobe Acrobat Reader DC"; $chkReader.Font = $fontNormal; $chkReader.Location = New-Object System.Drawing.Point(20, 170); $chkReader.Size = New-Object System.Drawing.Size(340, 24); $chkReader.Checked = $true
$chkRustDesk = New-Object System.Windows.Forms.CheckBox; $chkRustDesk.Text = "RustDesk (Escritorio Remoto)"; $chkRustDesk.Font = $fontNormal; $chkRustDesk.Location = New-Object System.Drawing.Point(20, 205); $chkRustDesk.Size = New-Object System.Drawing.Size(340, 24); $chkRustDesk.Checked = $true
$chkESET = New-Object System.Windows.Forms.CheckBox; $chkESET.Text = "ESET Security / NOD32"; $chkESET.Font = $fontNormal; $chkESET.Location = New-Object System.Drawing.Point(20, 240); $chkESET.Size = New-Object System.Drawing.Size(340, 24); $chkESET.Checked = $true
$chkOffice2024 = New-Object System.Windows.Forms.CheckBox; $chkOffice2024.Text = "Microsoft Office 2024 LTSC"; $chkOffice2024.Font = $fontNormal; $chkOffice2024.Location = New-Object System.Drawing.Point(20, 275); $chkOffice2024.Size = New-Object System.Drawing.Size(340, 24); $chkOffice2024.Checked = $true
$grpApps.Controls.AddRange(@($chkVLC, $chkWinRAR, $chk7Zip, $chkOnlyOffice, $chkReader, $chkRustDesk, $chkESET, $chkOffice2024))
# ==============================================================================
# LOGS Y BOTÓN
# ==============================================================================
$txtLog = New-Object System.Windows.Forms.TextBox
$txtLog.Multiline = $true
$txtLog.ScrollBars = "Vertical"
$txtLog.ReadOnly = $true
$txtLog.BackColor = [System.Drawing.Color]::Black
$txtLog.ForeColor = [System.Drawing.Color]::LightGreen
$txtLog.Font = New-Object System.Drawing.Font("Consolas", 8.5)
$txtLog.Location = New-Object System.Drawing.Point(15, 500)
$txtLog.Size = New-Object System.Drawing.Size(765, 160)
function Write-Log($msg) {
$txtLog.AppendText("[$((Get-Date).ToString('HH:mm:ss'))] $msg`r`n")
$txtLog.SelectionStart = $txtLog.Text.Length
$txtLog.ScrollToCaret()
$form.Refresh()
}
$btnRun = New-Object System.Windows.Forms.Button
$btnRun.Text = "INICIAR PUESTA EN MARCHA"
$btnRun.Font = New-Object System.Drawing.Font("Segoe UI", 10, [System.Drawing.FontStyle]::Bold)
$btnRun.BackColor = [System.Drawing.Color]::FromArgb(0, 120, 212)
$btnRun.ForeColor = [System.Drawing.Color]::White
$btnRun.FlatStyle = "Flat"
$btnRun.Location = New-Object System.Drawing.Point(15, 675)
$btnRun.Size = New-Object System.Drawing.Size(765, 45)
# ==============================================================================
# LÓGICA DE EJECUCIÓN
# ==============================================================================
$btnRun.Add_Click({
# Validación Admin
if ($chkAdmin.Checked) {
if ([string]::IsNullOrWhiteSpace($txtPass1.Text)) {
[System.Windows.Forms.MessageBox]::Show("Debes introducir una contraseña para la cuenta de Administrador.", "Error", "OK", "Error")
return
}
if ($txtPass1.Text -ne $txtPass2.Text) {
[System.Windows.Forms.MessageBox]::Show("Las contraseñas del usuario Administrador no coinciden.", "Error", "OK", "Error")
return
}
}
# Validación Hostname
if ($chkHostname.Checked -and [string]::IsNullOrWhiteSpace($txtHostname.Text)) {
[System.Windows.Forms.MessageBox]::Show("El nombre del equipo no puede estar vacío.", "Error", "OK", "Error")
return
}
$btnRun.Enabled = $false
Write-Log "Iniciando proceso de configuración..."
# 1. Hostname
if ($chkHostname.Checked -and ($txtHostname.Text.Trim() -ne $env:COMPUTERNAME)) {
Write-Log "Cambiando nombre del equipo a: $($txtHostname.Text.Trim())..."
Rename-Computer -NewName $txtHostname.Text.Trim() -Force -ErrorAction SilentlyContinue
}
# 2. UAC
if ($chkUAC.Checked) {
Write-Log "Configurando UAC al mínimo..."
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "ConsentPromptBehaviorAdmin" -Value 0 -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "PromptOnSecureDesktop" -Value 0 -ErrorAction SilentlyContinue
}
# 3. Administrador
if ($chkAdmin.Checked) {
Write-Log "Habilitando cuenta de Administrador..."
Enable-LocalUser -Name "Administrator" -ErrorAction SilentlyContinue
$secPass = ConvertTo-SecureString $txtPass1.Text -AsPlainText -Force
Set-LocalUser -Name "Administrator" -Password $secPass -ErrorAction SilentlyContinue
}
# 4. Modo de Tema (Claro / Oscuro)
if ($cmbTheme.SelectedItem -eq "Modo Oscuro") {
Write-Log "Aplicando Modo Oscuro del sistema..."
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "SystemUsesLightTheme" -Value 0 -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "AppsUseLightTheme" -Value 0 -ErrorAction SilentlyContinue
} elseif ($cmbTheme.SelectedItem -eq "Modo Claro") {
Write-Log "Aplicando Modo Claro del sistema..."
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "SystemUsesLightTheme" -Value 1 -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "AppsUseLightTheme" -Value 1 -ErrorAction SilentlyContinue
}
# 5. Resto de Tweaks de Windows
if ($chkPower.Checked) {
Write-Log "Activando plan de Alto Rendimiento..."
powercfg /setactive 8c5e7ffa-6259-46c2-a0a7-65c11643697b | Out-Null
}
if ($chkExt.Checked) {
Write-Log "Habilitando visibilidad de extensiones de archivo..."
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" -Value 0 -ErrorAction SilentlyContinue
}
if ($chkThisPC.Checked) {
Write-Log "Configurando explorador para abrir 'Este Equipo' y ocultar recientes..."
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "LaunchTo" -Value 1 -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer" -Name "ShowRecent" -Value 0 -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer" -Name "ShowFrequent" -Value 0 -ErrorAction SilentlyContinue
}
if ($chkMenuClassic.Checked) {
Write-Log "Habilitando menú contextual clásico de Windows 10..."
New-Item -Path "HKCU:\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" -Value "" -Force | Out-Null
}
if ($chkStartClean.Checked) {
Write-Log "Eliminando sugerencias del Menú Inicio..."
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "Start_IrisRecommendations" -Value 0 -ErrorAction SilentlyContinue
}
if ($chkUnpinTaskbar.Checked) {
Write-Log "Desanclando aplicaciones de la barra de tareas..."
Remove-Item "$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -Name "Favorites" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -Name "FavoritesResolve" -ErrorAction SilentlyContinue
}
# 6. Instalación de Aplicaciones con Winget
$appsToInstall = @()
if ($chkVLC.Checked) { $appsToInstall += @{ Name="VLC"; ID="VideoLAN.VLC" } }
if ($chkWinRAR.Checked) { $appsToInstall += @{ Name="WinRAR"; ID="RARLab.WinRAR" } }
if ($chk7Zip.Checked) { $appsToInstall += @{ Name="7-Zip"; ID="7zip.7zip" } }
if ($chkOnlyOffice.Checked) { $appsToInstall += @{ Name="ONLYOFFICE"; ID="ONLYOFFICE.DesktopEditors" } }
if ($chkReader.Checked) { $appsToInstall += @{ Name="Adobe Reader DC"; ID="Adobe.Acrobat.Reader.64-bit" } }
if ($chkRustDesk.Checked) { $appsToInstall += @{ Name="RustDesk"; ID="RustDesk.RustDesk" } }
if ($chkESET.Checked) { $appsToInstall += @{ Name="ESET Security"; ID="ESET.NOD32Antivirus" } }
foreach ($app in $appsToInstall) {
Write-Log "Instalando $($app.Name) mediante Winget..."
Start-Process winget -ArgumentList "install --id $($app.ID) -e --accept-package-agreements --accept-source-agreements --locale es-ES" -Wait -WindowStyle Hidden
}
# 7. Office 2024 LTSC
if ($chkOffice2024.Checked) {
Write-Log "Iniciando descarga e instalación de Office 2024 LTSC..."
$tempDir = "$env:TEMP\Office2024Setup"
New-Item -ItemType Directory -Path $tempDir -Force | Out-Null
$odtUrl = "https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-45E2-B715-7269136D423D/officedeploymenttool_17328-20162.exe"
Invoke-WebRequest -Uri $odtUrl -OutFile "$tempDir\odt.exe"
Start-Process "$tempDir\odt.exe" -ArgumentList "/quiet /extract:`"$tempDir`"" -Wait
$xmlConfig = @"
<Configuration>
<Add OfficeClientEdition="64" Channel="PerpetualVL2024">
<Product ID="ProPlus2024Volume">
<Language ID="es-es" />
<ExcludeApp ID="Lync" />
<ExcludeApp ID="OneDrive" />
</Product>
</Add>
<RemoveMSI />
<Display Level="Full" AcceptEULA="TRUE" />
</Configuration>
"@
$xmlConfig | Out-File -FilePath "$tempDir\configuration.xml" -Encoding utf8
Start-Process "$tempDir\setup.exe" -ArgumentList "/configure `"$tempDir\configuration.xml`"" -Wait
Write-Log "Instalación de Office 2024 finalizada."
}
Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue
Write-Log "¡PROCESO FINALIZADO CORRECTAMENTE!"
[System.Windows.Forms.MessageBox]::Show("La puesta en marcha ha terminado con éxito.", "Finalizado", "OK", "Information")
$btnRun.Enabled = $true
})
$form.Controls.AddRange(@($grpTweaks, $grpApps, $txtLog, $btnRun))
[void]$form.ShowDialog()