Я хотел бы использовать 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
В Server 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/
Вот еще один способ сделать это. Это должно быть запущено в контексте администратора:
$ Домен = "" $ computername = "$ env: computername" $ Группы $ = computer.psbase.children.find ( "администраторы") функция AddToGroup ($ число) { $ group.add ("WinNT: //" + $ domain + "/" + $ number) } # Добавить этих пользователей / группы домена в группу локальных администраторов AddToGroup "" AddToGroup "" # Добавьте эти учетные записи компьютеров домена в группу локальных администраторов. # Компьютерные аккаунты всегда заканчиваются на $. AddToGroup "$"
Больше информации на моем сайте .
При добавлении учетной записи, которая уже существует в целевой группе безопасности, возникает ошибка, поэтому необходимо проверить, добавлена ли учетная запись, однако мое требование заключалось в обратной совместимости с PowerShell v2.0.
Ниже приведен фрагмент, который я использую для добавления пользователя в группу локальных администраторов, которая работала в более старых версиях PowerShell для Windows Servers до 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
в приведенном выше заявлении идет к этому сообщению в блоге .