Fix: setup.ps1 en ASCII puro y UTF-8 con BOM para PS 5.1
This commit is contained in:
3
.gitattributes
vendored
Normal file
3
.gitattributes
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Forzar saltos de linea de Windows en scripts para PS 5.1 y cmd
|
||||
*.ps1 text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
116
setup.ps1
116
setup.ps1
@@ -1,43 +1,43 @@
|
||||
#Requires -Version 5.1
|
||||
#Requires -Version 5.1
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Configuración inicial de Windows 10.
|
||||
Configuracion inicial de Windows 10.
|
||||
|
||||
.DESCRIPTION
|
||||
Configura una cuenta técnica llamada "tecnica" y habilita
|
||||
Configura una cuenta tecnica llamada "tecnica" y habilita
|
||||
Escritorio Remoto.
|
||||
|
||||
Características:
|
||||
Caracteristicas:
|
||||
- Se autoeleva a Administrador.
|
||||
- Crea "tecnica" si no existe.
|
||||
- Solicita y confirma la contraseña al crearla.
|
||||
- NO cambia la contraseña si "tecnica" ya existe.
|
||||
- Añade "tecnica" al grupo Administradores.
|
||||
- Solicita y confirma la contrasena al crearla.
|
||||
- NO cambia la contrasena si "tecnica" ya existe.
|
||||
- Anade "tecnica" al grupo Administradores.
|
||||
- Activa Escritorio Remoto.
|
||||
- Configura el Firewall para RDP.
|
||||
- Añade "tecnica" al grupo Usuarios de escritorio remoto.
|
||||
- Anade "tecnica" al grupo Usuarios de escritorio remoto.
|
||||
- Oculta "tecnica" de la lista de usuarios del login.
|
||||
- Verifica el estado real al finalizar.
|
||||
- Registra todos los pasos y errores en %TEMP%\crb-setup.log.
|
||||
- Devuelve 0 si todo está correcto.
|
||||
- Devuelve 1 si hay algún error.
|
||||
- Devuelve 0 si todo esta correcto.
|
||||
- Devuelve 1 si hay algun error.
|
||||
|
||||
.NOTES
|
||||
Compatible con Windows 10 / PowerShell 5.1.
|
||||
#>
|
||||
|
||||
# ============================================================
|
||||
# CONFIGURACIÓN
|
||||
# CONFIGURACION
|
||||
# ============================================================
|
||||
|
||||
$Username = "tecnica"
|
||||
|
||||
# Ruta del log de diagnóstico.
|
||||
# Ruta del log de diagnostico.
|
||||
$LogPath = Join-Path $env:TEMP "crb-setup.log"
|
||||
|
||||
# ============================================================
|
||||
# CONFIGURACIÓN DE ERRORES
|
||||
# CONFIGURACION DE ERRORES
|
||||
# ============================================================
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
@@ -110,12 +110,12 @@ function Write-Log {
|
||||
-ErrorAction SilentlyContinue
|
||||
}
|
||||
catch {
|
||||
# El log nunca debe interrumpir la ejecución del script.
|
||||
# El log nunca debe interrumpir la ejecucion del script.
|
||||
}
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# OBTENER MENSAJE COMPLETO DE UNA EXCEPCIÓN
|
||||
# OBTENER MENSAJE COMPLETO DE UNA EXCEPCION
|
||||
# ============================================================
|
||||
|
||||
function Get-ExceptionMessage {
|
||||
@@ -166,7 +166,7 @@ function Ensure-Administrator {
|
||||
|
||||
Write-Host ""
|
||||
Write-WarningMessage "Se necesitan permisos de Administrador."
|
||||
Write-Host "Solicitando elevación mediante UAC..." -ForegroundColor Yellow
|
||||
Write-Host "Solicitando elevacion mediante UAC..." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
if (-not $PSCommandPath) {
|
||||
@@ -175,7 +175,7 @@ function Ensure-Administrator {
|
||||
}
|
||||
|
||||
# --------------------------------------------------------
|
||||
# ELEVACIÓN DESDE RUTA DE RED (UNC)
|
||||
# ELEVACION DESDE RUTA DE RED (UNC)
|
||||
# --------------------------------------------------------
|
||||
# El proceso elevado puede perder el acceso a la carpeta de
|
||||
# red (\\servidor\...). Para evitarlo, se copia el script
|
||||
@@ -186,7 +186,7 @@ function Ensure-Administrator {
|
||||
|
||||
if ($scriptPath -like "\\*") {
|
||||
|
||||
Write-WarningMessage "El script está en una ruta de red (UNC)."
|
||||
Write-WarningMessage "El script esta en una ruta de red (UNC)."
|
||||
Write-Host "Copiando a la carpeta temporal para poder elevarse..." `
|
||||
-ForegroundColor Yellow
|
||||
|
||||
@@ -293,7 +293,7 @@ function Get-LocalGroupBySid {
|
||||
Select-Object -First 1
|
||||
|
||||
if ($null -eq $group) {
|
||||
throw "No se encontró el grupo con SID $Sid."
|
||||
throw "No se encontro el grupo con SID $Sid."
|
||||
}
|
||||
|
||||
return $group
|
||||
@@ -341,7 +341,7 @@ function Test-UserInGroup {
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# AÑADIR USUARIO A GRUPO
|
||||
# ANADIR USUARIO A GRUPO
|
||||
# ============================================================
|
||||
|
||||
function Ensure-UserInGroup {
|
||||
@@ -362,7 +362,7 @@ function Ensure-UserInGroup {
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Añadiendo '$Username' a '$($Group.Name)'..." `
|
||||
Write-Host "Anadiendo '$Username' a '$($Group.Name)'..." `
|
||||
-ForegroundColor Cyan
|
||||
|
||||
Add-LocalGroupMember `
|
||||
@@ -370,18 +370,18 @@ function Ensure-UserInGroup {
|
||||
-Member $Username `
|
||||
-ErrorAction Stop
|
||||
|
||||
# Verificación inmediata.
|
||||
# Verificacion inmediata.
|
||||
|
||||
if (-not (Test-UserInGroup -Username $Username -Group $Group)) {
|
||||
|
||||
throw "El usuario '$Username' no aparece en '$($Group.Name)' después de añadirlo."
|
||||
throw "El usuario '$Username' no aparece en '$($Group.Name)' despues de anadirlo."
|
||||
}
|
||||
|
||||
Write-Ok "'$Username' pertenece ahora a '$($Group.Name)'."
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# PEDIR Y CONFIRMAR CONTRASEÑA
|
||||
# PEDIR Y CONFIRMAR CONTRASENA
|
||||
# ============================================================
|
||||
|
||||
function Read-ConfirmedPassword {
|
||||
@@ -389,12 +389,12 @@ function Read-ConfirmedPassword {
|
||||
while ($true) {
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Introduce la contraseña para '$Username'." `
|
||||
Write-Host "Introduce la contrasena para '$Username'." `
|
||||
-ForegroundColor Cyan
|
||||
|
||||
$password1 = Read-Host "Contraseña" -AsSecureString
|
||||
$password1 = Read-Host "Contrasena" -AsSecureString
|
||||
|
||||
$password2 = Read-Host "Repite la contraseña" -AsSecureString
|
||||
$password2 = Read-Host "Repite la contrasena" -AsSecureString
|
||||
|
||||
$ptr1 = [IntPtr]::Zero
|
||||
$ptr2 = [IntPtr]::Zero
|
||||
@@ -422,14 +422,14 @@ function Read-ConfirmedPassword {
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($plain1)) {
|
||||
|
||||
Write-ErrorMessage "La contraseña no puede estar vacía."
|
||||
Write-ErrorMessage "La contrasena no puede estar vacia."
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
if ($plain1 -cne $plain2) {
|
||||
|
||||
Write-ErrorMessage "Las contraseñas no coinciden."
|
||||
Write-ErrorMessage "Las contrasenas no coinciden."
|
||||
|
||||
continue
|
||||
}
|
||||
@@ -455,7 +455,7 @@ function Read-ConfirmedPassword {
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# CREAR / COMPROBAR USUARIO TÉCNICO
|
||||
# CREAR / COMPROBAR USUARIO TECNICO
|
||||
# ============================================================
|
||||
|
||||
function Ensure-TechnicalUser {
|
||||
@@ -497,18 +497,18 @@ function Ensure-TechnicalUser {
|
||||
New-LocalUser `
|
||||
-Name $Name `
|
||||
-Password $password `
|
||||
-Description "Cuenta técnica de administración" `
|
||||
-Description "Cuenta tecnica de administracion" `
|
||||
-AccountNeverExpires `
|
||||
-PasswordNeverExpires `
|
||||
-ErrorAction Stop | Out-Null
|
||||
|
||||
# Verificación real.
|
||||
# Verificacion real.
|
||||
|
||||
$verifiedUser = Get-LocalUserSafe -Name $Name
|
||||
|
||||
if ($null -eq $verifiedUser) {
|
||||
|
||||
throw "New-LocalUser terminó pero el usuario '$Name' no existe."
|
||||
throw "New-LocalUser termino pero el usuario '$Name' no existe."
|
||||
}
|
||||
|
||||
Write-Ok "Usuario '$Name' creado correctamente."
|
||||
@@ -564,7 +564,7 @@ function Enable-RemoteDesktop {
|
||||
-Value 0 `
|
||||
-ErrorAction Stop
|
||||
|
||||
# Verificación.
|
||||
# Verificacion.
|
||||
|
||||
$rdpValue = (
|
||||
Get-ItemProperty `
|
||||
@@ -578,7 +578,7 @@ function Enable-RemoteDesktop {
|
||||
throw "Windows sigue teniendo RDP desactivado."
|
||||
}
|
||||
|
||||
Write-Ok "RDP está activado en el registro de Windows."
|
||||
Write-Ok "RDP esta activado en el registro de Windows."
|
||||
|
||||
# --------------------------------------------------------
|
||||
# SERVICIO
|
||||
@@ -607,7 +607,7 @@ function Enable-RemoteDesktop {
|
||||
-ErrorAction Stop
|
||||
}
|
||||
|
||||
# Verificación.
|
||||
# Verificacion.
|
||||
|
||||
$service = Get-Service `
|
||||
-Name "TermService" `
|
||||
@@ -615,7 +615,7 @@ function Enable-RemoteDesktop {
|
||||
|
||||
if ($service.Status -ne "Running") {
|
||||
|
||||
throw "El servicio TermService no está ejecutándose."
|
||||
throw "El servicio TermService no esta ejecutandose."
|
||||
}
|
||||
|
||||
Write-Ok "Servicio TermService funcionando."
|
||||
@@ -630,7 +630,7 @@ function Enable-RemoteDesktop {
|
||||
|
||||
if ($firewallService.Status -ne "Running") {
|
||||
|
||||
Write-Host "El servicio de Firewall no está activo. Iniciándolo..." `
|
||||
Write-Host "El servicio de Firewall no esta activo. Iniciandolo..." `
|
||||
-ForegroundColor Yellow
|
||||
|
||||
if ($firewallService.StartType -eq "Disabled") {
|
||||
@@ -684,7 +684,7 @@ function Enable-RemoteDesktop {
|
||||
Enable-NetFirewallRule `
|
||||
-ErrorAction Stop
|
||||
|
||||
# Verificación REAL de las reglas.
|
||||
# Verificacion REAL de las reglas.
|
||||
|
||||
$enabledRules = @(
|
||||
Get-RdpFirewallRules |
|
||||
@@ -741,7 +741,7 @@ function Hide-UserFromLogin {
|
||||
-ErrorAction Stop |
|
||||
Out-Null
|
||||
|
||||
# Verificación.
|
||||
# Verificacion.
|
||||
|
||||
$value = (
|
||||
Get-ItemProperty `
|
||||
@@ -755,16 +755,16 @@ function Hide-UserFromLogin {
|
||||
throw "No se pudo ocultar '$Username' del login."
|
||||
}
|
||||
|
||||
Write-Ok "'$Username' está oculto de la lista de usuarios."
|
||||
Write-Ok "'$Username' esta oculto de la lista de usuarios."
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# VERIFICACIÓN FINAL
|
||||
# VERIFICACION FINAL
|
||||
# ============================================================
|
||||
|
||||
function Test-FinalConfiguration {
|
||||
|
||||
Write-Step "VERIFICACIÓN FINAL DEL SISTEMA"
|
||||
Write-Step "VERIFICACION FINAL DEL SISTEMA"
|
||||
|
||||
$allOk = $true
|
||||
|
||||
@@ -843,7 +843,7 @@ function Test-FinalConfiguration {
|
||||
}
|
||||
catch {
|
||||
|
||||
Write-ErrorMessage "No se pudo comprobar la configuración RDP."
|
||||
Write-ErrorMessage "No se pudo comprobar la configuracion RDP."
|
||||
|
||||
$allOk = $false
|
||||
}
|
||||
@@ -860,7 +860,7 @@ function Test-FinalConfiguration {
|
||||
|
||||
if ($service.Status -eq "Running") {
|
||||
|
||||
Write-Ok "TermService: EJECUTÁNDOSE"
|
||||
Write-Ok "TermService: EJECUTANDOSE"
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -903,7 +903,7 @@ function Test-FinalConfiguration {
|
||||
}
|
||||
else {
|
||||
|
||||
Write-ErrorMessage "Firewall RDP: LAS REGLAS EXISTEN PERO ESTÁN DESHABILITADAS"
|
||||
Write-ErrorMessage "Firewall RDP: LAS REGLAS EXISTEN PERO ESTAN DESHABILITADAS"
|
||||
}
|
||||
|
||||
$allOk = $false
|
||||
@@ -974,7 +974,7 @@ function Test-FinalConfiguration {
|
||||
}
|
||||
catch {
|
||||
|
||||
Write-ErrorMessage "No se pudo comprobar la ocultación del usuario."
|
||||
Write-ErrorMessage "No se pudo comprobar la ocultacion del usuario."
|
||||
|
||||
$allOk = $false
|
||||
}
|
||||
@@ -1011,18 +1011,18 @@ try {
|
||||
|
||||
Clear-Host
|
||||
|
||||
Write-Log "========== INICIO DE EJECUCIÓN =========="
|
||||
Write-Log "========== INICIO DE EJECUCION =========="
|
||||
Write-Log "Windows: $([Environment]::OSVersion.VersionString)"
|
||||
Write-Log "Usuario: $([Environment]::UserDomainName)\$([Environment]::UserName)"
|
||||
Write-Log "Elevado (Administrador): $(Test-IsAdministrator)"
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "==================================================" -ForegroundColor Cyan
|
||||
Write-Host " WINDOWS 10 - CONFIGURACIÓN INICIAL" -ForegroundColor Cyan
|
||||
Write-Host " WINDOWS 10 - CONFIGURACION INICIAL" -ForegroundColor Cyan
|
||||
Write-Host "==================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "Usuario técnico: $Username"
|
||||
Write-Host "Usuario tecnico: $Username"
|
||||
Write-Host ""
|
||||
|
||||
# --------------------------------------------------------
|
||||
@@ -1031,7 +1031,7 @@ try {
|
||||
|
||||
Ensure-Administrator
|
||||
|
||||
Write-Ok "El script se está ejecutando como Administrador."
|
||||
Write-Ok "El script se esta ejecutando como Administrador."
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 1. COMPROBAR GRUPOS
|
||||
@@ -1062,7 +1062,7 @@ try {
|
||||
|
||||
if (-not $user.Enabled) {
|
||||
|
||||
Write-Host "La cuenta está deshabilitada. Habilitándola..." `
|
||||
Write-Host "La cuenta esta deshabilitada. Habilitandola..." `
|
||||
-ForegroundColor Yellow
|
||||
|
||||
Enable-LocalUser `
|
||||
@@ -1080,7 +1080,7 @@ try {
|
||||
}
|
||||
else {
|
||||
|
||||
Write-Ok "Usuario '$Username' está habilitado."
|
||||
Write-Ok "Usuario '$Username' esta habilitado."
|
||||
}
|
||||
|
||||
# --------------------------------------------------------
|
||||
@@ -1121,7 +1121,7 @@ try {
|
||||
-Username $Username
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 8. VERIFICACIÓN FINAL
|
||||
# 8. VERIFICACION FINAL
|
||||
# --------------------------------------------------------
|
||||
|
||||
$result = Test-FinalConfiguration
|
||||
@@ -1134,13 +1134,13 @@ try {
|
||||
|
||||
if ($result) {
|
||||
|
||||
Write-Host "La configuración se ha completado correctamente." `
|
||||
Write-Host "La configuracion se ha completado correctamente." `
|
||||
-ForegroundColor Green
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "El script se puede ejecutar de nuevo sin cambiar" `
|
||||
-ForegroundColor Green
|
||||
Write-Host "la contraseña del usuario existente." `
|
||||
Write-Host "la contrasena del usuario existente." `
|
||||
-ForegroundColor Green
|
||||
|
||||
Write-Host ""
|
||||
@@ -1149,7 +1149,7 @@ try {
|
||||
}
|
||||
else {
|
||||
|
||||
Write-Host "La configuración NO se ha completado correctamente." `
|
||||
Write-Host "La configuracion NO se ha completado correctamente." `
|
||||
-ForegroundColor Red
|
||||
|
||||
Write-Host ""
|
||||
@@ -1185,7 +1185,7 @@ catch {
|
||||
Write-Host ""
|
||||
Write-Host "El script se ha detenido para evitar continuar" `
|
||||
-ForegroundColor Yellow
|
||||
Write-Host "con una configuración incompleta." `
|
||||
Write-Host "con una configuracion incompleta." `
|
||||
-ForegroundColor Yellow
|
||||
|
||||
Write-Host ""
|
||||
|
||||
Reference in New Issue
Block a user