Chciałbym użyć programu PowerShell, aby dodać określonego użytkownika do lokalnej grupy administratorów na komputerze. Uruchomiłbym skrypt PowerShell w kontekście użytkownika, który ma uprawnienia administracyjne na komputerze lokalnym.
Chciałbym użyć programu PowerShell, aby dodać określonego użytkownika do lokalnej grupy administratorów na komputerze. Uruchomiłbym skrypt PowerShell w kontekście użytkownika, który ma uprawnienia administracyjne na komputerze lokalnym.
Odpowiedzi:
Jest to funkcja zaawansowana, której używam do dodawania użytkowników do lokalnej grupy administratorów za pomocą programu PowerShell na kilku komputerach.
Zastosowanie: Get-Content C: \ Computers.txt | Set-LocalAdminGroupMembership -Konto „Twoje konto”
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
Na serwerze 2016 i Windows 10 w wersji 1607 i nowszych można używać nowych poleceń cmdlet lokalnych użytkowników programu PowerShell:
Add-LocalGroupMember -Group Administrators -Member username
Zostało to dodane w Windows Management Framework (WMF) 5.1.
Microsoft.PowerShell.LocalAccounts
Moduł działa prawidłowo na 2012 R2, jeśli po prostu skopiować pliki do $env:PsModulePath
lokalizacji.
Oto prosty 2-wierszowy skrypt, który wykonuje tę funkcję
$group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/administrators,group")
$group.add("WinNT://$env:USERDOMAIN/usernameiwantoadd,user")
Aby uzyskać więcej informacji, zobacz Cześć, Skrypciarze! Jak użyć programu Windows PowerShell, aby dodać użytkownika domeny do grupy lokalnej?
Jest więc kilka notatek. W pierwszym wierszu użyłem konkatenacji łańcuchów, nie musiałem (patrz następny wiersz), ale lubię to, ponieważ pomaga to podkreślić zmienne, których używam. Po drugie, wiersze te dodadzą użytkownika domeny, jeśli chcesz dodać użytkownika lokalnego, po prostu usuń$env:USERDOMAIN/
Oto inny sposób, aby to zrobić. Należy to uruchomić w kontekście administratora:
$ domain = "" $ nazwa_komputera = "$ env: nazwa_komputera" $ group = $ computer.psbase.children.find („administratorzy”) funkcja AddToGroup (liczba $) { $ group.add („WinNT: //” + $ domain + ”/” + $ number) } # Dodaj tych użytkowników / grup domeny do lokalnej grupy administratorów Dodaj do grupy "" Dodaj do grupy "" # Dodaj te konta komputerów domeny do lokalnej grupy administratorów. # Konta komputerowe zawsze kończą się na $. AddToGroup „$”
Więcej informacji na mojej stronie internetowej .
Dodanie konta, które już istnieje w docelowej grupie zabezpieczeń, podnosi się i występuje błąd, więc musisz sprawdzić, czy konto zostało już dodane, jednak moim wymaganiem była zgodność wsteczna do wersji PowerShell v2.0
Poniżej znajduje się fragment, którego używam do dodawania użytkownika do lokalnej grupy administratorów, która działa na starszych wersjach programu PowerShell dla serwerów Windows wcześniejszych niż 2016. Przykład kodu dodaje konto usługi używane do niestandardowej tożsamości aplikacji IIS AppPool do lokalnej grupy Administratorzy.
$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."
}
Podziękowania za użycie net localgroup administrators
w powyższym wyciągu if trafiają do tego postu na blogu .