Vorrei usare PowerShell per aggiungere un utente specifico al gruppo di amministratori locali su una macchina. Avrei eseguito lo script PowerShell nel contesto di un utente che dispone dei diritti di amministrazione sulla macchina locale.
Vorrei usare PowerShell per aggiungere un utente specifico al gruppo di amministratori locali su una macchina. Avrei eseguito lo script PowerShell nel contesto di un utente che dispone dei diritti di amministrazione sulla macchina locale.
Risposte:
Questa è la funzione avanzata che uso per aggiungere un utente al gruppo di amministratori locale usando Powershell su più computer.
Utilizzo: Get-Content C: \ Computers.txt | Set-LocalAdminGroupMembership -Account '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
Su Server 2016 e Windows 10 versione 1607 e successive è possibile utilizzare i nuovi cmdlet di utenti locali di PowerShell:
Add-LocalGroupMember -Group Administrators -Member username
Questo è stato aggiunto in Windows Management Framework (WMF) 5.1.
Il Microsoft.PowerShell.LocalAccounts
modulo funziona perfettamente su 2012 R2 se si copiano i file in un $env:PsModulePath
percorso.
Ecco un semplice script a 2 righe che svolge questa funzione
$group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/administrators,group")
$group.add("WinNT://$env:USERDOMAIN/usernameiwantoadd,user")
Per ulteriori informazioni, vedere Hey, Scripting Guy! Come posso usare Windows PowerShell per aggiungere un utente di dominio a un gruppo locale?
Quindi ci sono un paio di note. Nella prima riga ho usato la concatenazione di stringhe, non dovevo (vedere la riga successiva) ma mi piace perché aiuta ad accentuare le variabili che sto usando. In secondo luogo, queste righe aggiungeranno un utente di dominio, se si desidera aggiungere un utente locale è sufficiente rimuoverlo$env:USERDOMAIN/
Ecco un altro modo per farlo. Questo deve essere eseguito nel contesto di amministratore:
$ Domain = "" $ nomecomputer = "$ env: nomecomputer" $ Group = $ computer.psbase.children.find ( "amministratori") funzione AddToGroup ($ numero) { $ group.add ("WinNT: //" + $ domain + "/" + $ number) } #Aggiungi questi utenti / gruppi di dominio al gruppo di amministratori locali AddToGroup "" AddToGroup "" #Aggiungi questi account di computer di dominio al gruppo di amministratori locali. # Gli account dei computer terminano sempre con $. AddToGroup "$"
Maggiori informazioni sul mio sito web .
L'aggiunta di un account già esistente nel gruppo di sicurezza di destinazione genera ed errore, quindi è necessario verificare se l'account è già stato aggiunto, tuttavia il mio requisito era di essere retrocompatibile fino a PowerShell v2.0
Di seguito è riportato lo snippet che utilizzo per aggiungere un utente al gruppo di amministratori locali che lavora su versioni precedenti di PowerShell per server Windows precedenti al 2016. L'esempio di codice aggiunge un account di servizio utilizzato per l'identità personalizzata IIS AppPool al gruppo Administrators locale.
$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."
}
Il credito per l'utilizzo net localgroup administrators
nell'istruzione if precedente va a questo post del blog .