Descargas

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()