Me gustaría usar PowerShell para agregar un usuario específico al grupo de administradores locales en una máquina. Estaría ejecutando el script de PowerShell en el contexto de un usuario que tiene derechos de Administración en la máquina local.
Me gustaría usar PowerShell para agregar un usuario específico al grupo de administradores locales en una máquina. Estaría ejecutando el script de PowerShell en el contexto de un usuario que tiene derechos de Administración en la máquina local.
Respuestas:
Esta es la función avanzada que uso para agregar usuarios al grupo de administradores locales que usan Powershell en varias computadoras.
Uso: Get-Content C: \ Computers.txt | Set-LocalAdminGroupMembership -Cuenta 'YourAccount'
Function Global:Set-LocalAdminGroupMembership
{
<#
.Synopsis
.Description
.Parameter $ComputerName,
.Example
PS> Set-LocalAdminGroupMembership -ComputerName $ComputerName -Account 'YourAccount'
.Link
about_functions
about_functions_advanced
about_functions_advanced_methods
about_functions_advanced_parameters
.Notes
NAME: Set-LocalAdminGroupMembership
AUTHOR: Innotask.com\dmiller
LASTEDIT: 2/4/2010 2:30:05 PM
#Requires -Version 2.0
#>
[CmdletBinding()]
param(
[Parameter(Position=0, ValueFromPipeline=$true)]
$ComputerName = '.',
[Parameter(Position=1, Mandatory=$true)]
$Account
)
Process
{
if($ComputerName -eq '.'){$ComputerName = (get-WmiObject win32_computersystem).Name}
$ComputerName = $ComputerName.ToUpper()
$Domain = $env:USERDNSDOMAIN
if($Domain){
$adsi = [ADSI]"WinNT://$ComputerName/administrators,group"
$adsi.add("WinNT://$Domain/$Account,group")
}else{
Write-Host "Not connected to a domain." -foregroundcolor "red"
}
}# Process
}# Set-LocalAdminGroupMembership
En Server 2016 y Windows 10 versión 1607 y posteriores, puede usar los nuevos cmdlets de usuario local de PowerShell:
Add-LocalGroupMember -Group Administrators -Member username
Esto se agregó en Windows Management Framework (WMF) 5.1.
El Microsoft.PowerShell.LocalAccounts
módulo funciona bien en 2012 R2 si solo copia los archivos en una $env:PsModulePath
ubicación.
Aquí hay un script simple de 2 líneas que realiza esta función
$group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/administrators,group")
$group.add("WinNT://$env:USERDOMAIN/usernameiwantoadd,user")
Para obtener más información, consulte Hey, Scripting Guy! ¿Cómo puedo usar Windows PowerShell para agregar un usuario de dominio a un grupo local?
Entonces hay un par de notas. En la primera línea utilicé la concatenación de cadenas, no tuve que hacerlo (ver la siguiente línea) pero me gusta porque ayuda a acentuar las variables que estoy usando. En segundo lugar, estas líneas agregarán un usuario de dominio, si desea agregar un usuario local simplemente elimine$env:USERDOMAIN/
Aquí hay otra forma de hacer esto. Esto debe ejecutarse en el contexto del administrador:
$ dominio = "" $ computername = "$ env: computername" $ group = $ computer.psbase.children.find ("administradores") función AddToGroup ($ number) { $ group.add ("WinNT: //" + $ dominio + "/" + $ número) } # Agregue estos usuarios / grupos de dominio al grupo de administradores locales Añadir al grupo "" Añadir al grupo "" # Agregue estas cuentas de computadora de dominio al grupo de administradores locales. # Las cuentas de computadora siempre terminan con $. AddToGroup "$"
Más información en mi sitio web .
Agregar una cuenta que ya existe en el grupo de seguridad objetivo aumenta y se produce un error, por lo que debe verificar si la cuenta ya está agregada, sin embargo, mi requisito era ser compatible con versiones anteriores de PowerShell v2.0
A continuación se muestra el fragmento que utilizo para agregar un usuario al grupo de administradores locales que funciona en versiones anteriores de PowerShell para servidores de Windows anteriores a 2016. El ejemplo de código agrega una cuenta de servicio utilizada para la identidad personalizada de IIS AppPool al grupo de administradores locales.
$appPoolIdentity = "DOMAIN\svc-acc-name"
# check if user is already member of the local administrators group - using case insensitive string comparison
if(((invoke-command {net localgroup administrators}) -match ($appPoolIdentity -replace '\\','\\')).Count -eq 0){
Write-Host "The app pool identity user '$appPoolIdentity' is not found in the local 'Administrators' group."
# add user to the local administrators group
$adminGroup = [ADSI]("WinNT://$env:COMPUTERNAME/administrators,group")
$adminGroup.Add("WinNT://$appPoolIdentity,user")
Write-Warning "Added '$appPoolIdentity' to the local 'Administrators' group."
}else{
Write-Host "The app pool identity user '$appPoolIdentity' is already member of local 'Administrators' group."
}
El crédito por usar net localgroup administrators
en la declaración if anterior va a esta publicación de blog .