<# .SYNOPSIS Instala o actualiza una terminal de Microsip de forma robusta y automatizada. .DESCRIPTION El script ahora utiliza 'net use' para mapear la unidad de red, garantizando que sea visible para procesos externos como Robocopy y solucionando el error "ruta no encontrada". 1. Respalda la instalación existente si la encuentra. 2. Busca una letra de unidad disponible y la mapea con 'net use' para máxima compatibilidad. 3. Sincroniza los archivos eficientemente con Robocopy. 4. Detecta la versión y crea el acceso directo correspondiente. .AUTHOR Luis Alberto Garcia + Asistente de Google .VERSION 2.6.0 - 2025-10-06 - Versión Estable. Cambiado New-PSDrive por net use para compatibilidad de procesos. #> # =================================================================== # Script de Instalación/Actualización de Microsip # =================================================================== # --- CONFIGURACIÓN DE RUTAS Y CREDENCIALES --- $rutaMicrosip = "C:Program Files (x86)Microsip" $IPServidor = "192.168.0.5" # <-- IP del servidor de archivos. # --- ADVERTENCIA: La contraseña es visible en este método. --- $UsuarioServidor = "act" $ContraseñaServidor = "Abc987-*/" # --- RUTAS DE TRABAJO CENTRALIZADAS --- $rutaBaseTrabajo = Join-Path -Path $env:LOCALAPPDATA -ChildPath "it++" $rutaBaseRespaldo = Join-Path -Path $rutaBaseTrabajo -ChildPath "Backups" # --- CONSTRUCCIÓN DE RUTA DE ORIGEN --- $rutaOrigenArchivos = "\$IPServidorADC" # =================================================================== # PASO 1: RESPALDO (SOLO SI ES UNA ACTUALIZACIÓN) # =================================================================== Write-Host "PASO 1: Verificando instalación existente..." -ForegroundColor Cyan if (Test-Path $rutaMicrosip) { Write-Host "Instalación detectada. Se procederá con el respaldo." -ForegroundColor Green $timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss" $nombreCarpetaRespaldo = "Respaldo_$timestamp" $rutaDestinoFinal = Join-Path -Path $rutaBaseRespaldo -ChildPath $nombreCarpetaRespaldo Write-Host "Creando directorio de respaldo en: $rutaDestinoFinal" -ForegroundColor Yellow New-Item -Path $rutaDestinoFinal -ItemType Directory -Force | Out-Null Write-Host "Copiando archivos para el respaldo... Esto puede tardar." -ForegroundColor Yellow Copy-Item -Path "$rutaMicrosip*" -Destination $rutaDestinoFinal -Recurse -Force Write-Host "✅ ¡Respaldo completado!" -ForegroundColor Green } else { Write-Host "No se encontró instalación. Se procederá con una instalación nueva." -ForegroundColor Yellow } # =================================================================== # PASO 2: SINCRONIZACIÓN DE ARCHIVOS CON 'NET USE' # =================================================================== Write-Host "PASO 2: Conectando al servidor para sincronizar archivos..." -ForegroundColor Cyan $VersionInstalada = $null $letraUnidadAsignada = $null try { # --- Búsqueda de Letra de Unidad Disponible --- $letrasDisponibles = "L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" foreach ($letra in $letrasDisponibles) { if (-not (Test-Path -Path "$($letra):")) { $letraUnidadAsignada = $letra # Guardamos la letra que vamos a usar break } } if (-not $letraUnidadAsignada) { throw "FALLO CRÍTICO: No se encontró ninguna letra de unidad disponible entre la L y la Z." } # --- Mapeo de unidad con 'net use' --- Write-Host "Letra '$($letraUnidadAsignada):' está libre. Mapeando con 'net use'..." -ForegroundColor Yellow net use "$($letraUnidadAsignada):" $rutaOrigenArchivos /user:$UsuarioServidor $ContraseñaServidor $rutaUnidadRed = "$($letraUnidadAsignada):" Write-Host "Detectando la versión desde el servidor..." -ForegroundColor Yellow $carpetasVersion = Get-ChildItem -Path $rutaUnidadRed -Directory if ($carpetasVersion.Count -ne 1) { throw "Error: Se esperaba encontrar UNA sola carpeta de versión en el servidor, pero se encontraron $($carpetasVersion.Count)." } $VersionInstalada = $carpetasVersion.Name Write-Host "✅ Versión detectada: $VersionInstalada" -ForegroundColor Green Write-Host "Sincronizando archivos con Robocopy..." -ForegroundColor Yellow Robocopy $rutaUnidadRed $rutaMicrosip /mir /r:1 /w:5 /v /np Write-Host "✅ ¡Archivos de Microsip sincronizados correctamente!" -ForegroundColor Green } catch { Write-Host "❌ ERROR: Fallo en el Paso 2." -ForegroundColor Red Write-Host $_.Exception.Message -ForegroundColor Red Read-Host "El script no puede continuar. Presiona Enter para salir." exit } finally { # Limpieza con 'net use /delete' if ($letraUnidadAsignada) { Write-Host "Limpiando y desconectando la unidad de red '$($letraUnidadAsignada):'..." -ForegroundColor Gray net use "$($letraUnidadAsignada):" /delete /y } } # =================================================================== # PASO 3: CREAR ACCESO DIRECTO EN EL ESCRITORIO # =================================================================== Write-Host "PASO 3: Creando acceso directo en el escritorio..." -ForegroundColor Cyan try { $rutaCarpetaVersion = Join-Path -Path $rutaMicrosip -ChildPath $VersionInstalada $rutaEjecutable = Join-Path -Path $rutaCarpetaVersion -ChildPath "microsip.exe" $rutaAccesoDirecto = Join-Path -Path $env:USERPROFILE -ChildPath "DesktopMicrosip.lnk" $shell = New-Object -ComObject WScript.Shell $shortcut = $shell.CreateShortcut($rutaAccesoDirecto) $shortcut.TargetPath = $rutaEjecutable $shortcut.WorkingDirectory = $rutaCarpetaVersion $shortcut.Save() Write-Host "✅ ¡Acceso directo creado con éxito en el escritorio!" -ForegroundColor Green } catch { Write-Host "❌ ERROR: No se pudo crear el acceso directo." -ForegroundColor Red Write-Host $_.Exception.Message -ForegroundColor Red } Read-Host "Proceso completado. Presiona Enter para salir."