Cómo crear un nuevo usuario local con PowerShell
Cuando necesite crear un usuario local en Windows 10 u 11, puede utilizar el panel de control de Cuentas de usuario. Pero también podemos usar PowerShell para crear un nuevo usuario local. De esta manera podemos automatizar fácilmente la creación de una cuenta local en dispositivos Windows.
Para crear un usuario local con PowerShell, necesitará tener acceso de administrador a la computadora y ejecutar PowerShell como administrador (elevado). De lo contrario, no podrá crear cuentas.
En este artículo, explicaré cómo se puede crear un nuevo usuario local. Al final del artículo, tengo dos scripts de PowerShell que puedes usar para crear un usuario local.
Crear usuario local con PowerShell
Para crear un nuevo usuario local, usaremos el cmdlet New-LocalUser en PowerShell. Tenemos la opción de establecer una contraseña para la cuenta o crear una cuenta sin contraseña.
También hay un par de otros parámetros útiles que podemos usar:
- -Name
-
Nombre de inicio de sesión de la cuenta: máximo 20 caracteres
- -Password
Contraseña: suministrada con una cadena segura
- -Description
Descripción de la cuenta
- -AccountExpires
Objeto DateTime cuando la cuenta caduca
- -AccountNeverExpires
La cuenta no caduca
- -Disabled
Crea la cuenta como deshabilitada
- -FullName
El nombre para mostrar de la cuenta.
- -PasswordNeverExpires
La contraseña no caduca
- -UserMayNotChangePassword
El usuario no puede cambiar la contraseña
Entonces para crear rápidamente una cuenta de usuario local con PowerShell podemos hacer lo siguiente:
$password = Read-Host -AsSecureString
New-LocalUser -Name "LazyUser" -Password $password -FullName "Lazy User" -Description "Test user"
Nota
PowerShell 7.3.x arroja un error "New-LocalUser: No se pudo cargar el tipo 'Microsoft.PowerShell.Telemetry.Internal.TelemetryAPI'", puede resolverlo importando primero el módulo de cuentas locales con:import-module microsoft.powershell .localaccounts -UsarWindowsPowerShell
Este pequeño script de PowerShell requerirá que primero ingrese la contraseña, después de lo cual se crea el usuario con la contraseña proporcionada.
Proporcionar la contraseña
Como puede ver, esto no le permitirá ejecutar el script de forma autónoma, porque deberá ingresar una contraseña. Este también es el desafío de crear usuarios locales, la mayoría de las veces desea proporcionar la contraseña de forma segura.
Si ejecuta el script de forma remota o bajo su propia supervisión, puede escribir la contraseña dentro de un script de PowerShell y convertirla en una cadena segura. Pero tenga en cuenta que cualquiera que abra el script podrá leer la contraseña.
# Username and Password
$username = "LazyUser"
$password = ConvertTo-SecureString "LazyAdminPwd123!" -AsPlainText -Force # Super strong plane text password here (yes this isn't secure at all)
# Creating the user
New-LocalUser -Name "$username" -Password $password -FullName "$username" -Description "Lazy Test user"Puede guardar esto en un archivo ps1 y simplemente ejecutarlo en una sesión elevada de PowerShell.
Configuración de la fecha de vencimiento
De forma predeterminada, la nueva cuenta de usuario no caducará, pero con el cmdlet New-LocalUser podemos establecer una fecha de caducidad para la cuenta. Para la fecha necesitaremos usar un objeto DateTime de PowerShell:
$date = Get-Date -Year 2022 -Month 06 -Day 10
# Creating the user
New-LocalUser -Name "$username" -Password $password -AccountExpires $date -FullName "$username" -Description "Lazy Test user"Convertir al usuario en miembro de un grupo con Add-LocalGroupMember
Una vez que haya creado el usuario, deberá convertirlo en miembro de un grupo local. Sin él, el usuario no podrá iniciar sesión. Para convertir al usuario en miembro de un grupo, utilizaremos el cmdlet Add-LocalGroupMember.
Add-LocalGroupMember solo requiere el nombre del grupo y el miembro que desea agregar:
Add-LocalGroupMember -Group Users -Member LazyUserEl cmdlet no proporciona ningún resultado en caso de éxito, solo un error cuando no se encuentra el nombre del grupo o el miembro.
También puedes agregar varios usuarios a un grupo local con PowerShell. Simplemente separe con comas los miembros del cmdlet:
Add-LocalGroupMember -Group Users -Member "LazyUser", "LazyUser2"Script completo para nuevo usuario local en PowerShell
He creado dos scripts que le ayudarán a crear una cuenta de usuario local con PowerShell. En ambos scripts, agregué la opción de escribir un archivo de registro. Este archivo de registro se almacena en un recurso compartido de red, lo que le permite comprobar fácilmente si la creación se realizó correctamente en la computadora.
El primer script tiene una contraseña establecida en el script, por lo que simplemente puede ejecutar el script en una computadora. ¡Tenga en cuenta que necesitará tener acceso de administrador para crear una cuenta de usuario local!
<#
.SYNOPSIS
Create local admin acc
.DESCRIPTION
Creates a local administrator account on de computer. Requires RunAs permissions to run
.OUTPUTS
none
.NOTES
Version: 1.0
Author: R. Mens - LazyAdmin.nl
Creation Date: 25 march 2022
Purpose/Change: Initial script development
#>
# Configuration
$username = "adminTest" # Administrator is built-in name
$password = ConvertTo-SecureString "LazyAdminPwd123!" -AsPlainText -Force # Super strong plane text password here (yes this isn't secure at all)
$logFile = "\\server\folder\log.txt"
Function Write-Log {
param(
[Parameter(Mandatory = $true)][string] $message,
[Parameter(Mandatory = $false)]
[ValidateSet("INFO","WARN","ERROR")]
[string] $level = "INFO"
)
# Create timestamp
$timestamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
# Append content to log file
Add-Content -Path $logFile -Value "$timestamp [$level] - $message"
}
Function Create-LocalAdmin {
process {
try {
New-LocalUser "$username" -Password $password -FullName "$username" -Description "local admin" -ErrorAction stop
Write-Log -message "$username local user crated"
# Add new user to administrator group
Add-LocalGroupMember -Group "Administrators" -Member "$username" -ErrorAction stop
Write-Log -message "$username added to the local administrator group"
}catch{
Write-log -message "Creating local account failed" -level "ERROR"
}
}
}
Write-Log -message "#########"
Write-Log -message "$env:COMPUTERNAME - Create local admin account"
Create-LocalAdmin
Write-Log -message "#########"En este caso, el script convertirá al usuario en miembro del grupo de administradores. Por supuesto, puedes cambiar esto a cualquier otro grupo. Asegúrese de configurar el nombre de usuario, la contraseña y la ruta del archivo de registro en esta primera parte del script.
También puedes descargar el script completo aquí desde mi repositorio de Github.
Script de cuenta de usuario local
El segundo script crea una cuenta de usuario local que es miembro de los grupos de usuarios. La diferencia con el primer script es que este script solicitará la contraseña.
<#
.SYNOPSIS
Create local user acc
.DESCRIPTION
Creates a local user account on de computer. Requires RunAs permissions to run
.OUTPUTS
none
.NOTES
Version: 1.0
Author: R. Mens - LazyAdmin.nl
Creation Date: 25 march 2022
Purpose/Change: Initial script development
#>
# Configuration
$username = "LazyTestUser" # UserName
$fullName = "Lazy Test User" # Full name
$logFile = "\\server\folder\log.txt"
Function Write-Log {
param(
[Parameter(Mandatory = $true)][string] $message,
[Parameter(Mandatory = $false)]
[ValidateSet("INFO","WARN","ERROR")]
[string] $level = "INFO"
)
# Create timestamp
$timestamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
# Append content to log file
Add-Content -Path $logFile -Value "$timestamp [$level] - $message"
}
Function Create-LocalUser {
process {
try {
New-LocalUser "$username" -Password $password -FullName "$fullname" -Description "local user" -ErrorAction stop
Write-Log -message "$username local user created"
# Add new user to administrator group
Add-LocalGroupMember -Group "Users" -Member "$username" -ErrorAction stop
Write-Log -message "$username added to the local users group"
}catch{
Write-log -message "Creating local account failed" -level "ERROR"
}
}
}
# Enter the password
Write-Host "Enter the password for the local user account" -ForegroundColor Cyan
$password = Read-Host -AsSecureString
Write-Log -message "#########"
Write-Log -message "$env:COMPUTERNAME - Create local user account"
Create-LocalUser
Write-Log -message "#########"Nuevamente, puedes descargar el script completo aquí desde mi repositorio de Github.
Concluyendo
El nuevo usuario local también debería poder crear una cuenta local que esté conectada a una cuenta de Microsoft. Pero el nombre de usuario todavía está limitado a 20 caracteres y no acepta el símbolo @. Por ahora, estamos limitados únicamente a cuentas locales.
Espero que este artículo te haya ayudado a crear una cuenta de usuario local con PowerShell. Si tiene alguna pregunta, simplemente deje un comentario a continuación.
