Я хотів би використовувати PowerShell для додання конкретного користувача до локальної групи адміністраторів на машині. Я би запускав скрипт PowerShell в контексті користувача, який має права адміністрування на локальній машині.
Я хотів би використовувати PowerShell для додання конкретного користувача до локальної групи адміністраторів на машині. Я би запускав скрипт PowerShell в контексті користувача, який має права адміністрування на локальній машині.
Відповіді:
Це розширена функція, яку я використовую, щоб додати користувачів до локальної групи адміністраторів за допомогою Powershell на декількох комп'ютерах.
Використання: 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
На серверах 2016 та Windows 10 версії 1607 та новіших версій ви можете використовувати нові командлети PowerShell для локальних користувачів:
Add-LocalGroupMember -Group Administrators -Member username
Це було додано у Windows Management Framework (WMF) 5.1.
Microsoft.PowerShell.LocalAccounts
Модуль працює відмінно на 2012 R2 , якщо ви просто скопіювати файли в $env:PsModulePath
місце.
Ось простий дворядковий сценарій, який виконує цю функцію
$group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/administrators,group")
$group.add("WinNT://$env:USERDOMAIN/usernameiwantoadd,user")
Для отримання додаткової інформації див Ей, Сценарій Хлопець! Як я можу за допомогою Windows PowerShell додати користувача домену до локальної групи?
Отже, є пара нот. У першому рядку я використовував конкатенацію рядків, мені не довелося (див. Наступний рядок), але мені це подобається, тому що це допомагає підкреслити змінні, які я використовую. По-друге, ці рядки додадуть користувача домену, якщо ви хочете додати місцевого користувача, просто видаліть$env:USERDOMAIN/
Ось ще один спосіб зробити це. Це потрібно запустити в контексті адміністратора:
$ domain = "" $ computername = "$ env: ім'я комп'ютера" $ group = $ computer.psbase.children.find ("адміністратори") функція AddToGroup ($ номер) { $ group.add ("WinNT: //" + $ домен + "/" + номер $) } #Додайте цих користувачів / груп домену до локальної групи адміністраторів AddToGroup "" AddToGroup "" #Додайте ці облікові записи домену в локальну групу адміністраторів. # Комп'ютерні рахунки завжди закінчуються на $. AddToGroup "$"
Більше інформації на моєму веб-сайті .
Додавання облікового запису, який вже існує у цільовій групі безпеки, збільшує та помиляє, тому вам потрібно перевірити, чи вже додано обліковий запис, проте моя вимога полягала в тому, щоб бути сумісним назад до PowerShell v2.0
Нижче наведено фрагмент, який я використовую, щоб додати користувача до групи місцевих адміністраторів, яка працює на старих версіях PowerShell для серверів Windows до 2016 року. Приклад коду додає до локальної групи адміністраторів обліковий запис служби, що використовується для користувацької ідентифікації IIS AppPool.
$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."
}
Заслуга за використання net localgroup administrators
у викладі if якщо йдеться про цю публікацію в блозі .