Задать вопрос

Add-LocalGroupMember где ошибся?

Здравствуйте коллеги нужно создать 2-х пользователей (1- sysadmib) 2 - с именем таким же как и имя компа. Пароль для обоих одинаковый.

Делаю

$name = (hostname)
$pass = ConvertTo-SecureString "1234567" -AsPlainText -Force

#Создаем пользака sysadmin

New-LocalUser -Name sysadmin -PasswordNeverExpires -Password $pass
Add-LocalGroupMember -Group Администраторы -Member sysadmin
Add-LocalGroupMember -Group "Пользователи удаленного рабочего стола" -Member sysadmin

#Создаем пользака с именем компа
New-LocalUser -Name $name -PasswordNeverExpires -Password $pass
Add-LocalGroupMember -Group Администраторы -Member $name
Add-LocalGroupMember -Group "Пользователи удаленного рабочего стола" -Member $name

sysadmin создается и в группы добавляется, второй пользак создается но в группы не добавляется.
Подскажите где косяк ?

6573074934c57754836308.jpeg
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой 9 комментариев
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Попробуйте добавлять не имя, а результат new-localuser или get-localuser, раз уж создан


MaxKozlov, спасибо помогло добавление еще одной переменной после создания пользака и запихивания туда выхлопа Get-LocalUser -Name $name.

чертовски странно но оно работает ))

$name = hostname
$pass = ConvertTo-SecureString "1234567" -AsPlainText -Force

#Создаем пользака sysadmin
New-LocalUser -Name sysadmin -PasswordNeverExpires -Password $pass
Add-LocalGroupMember -Group Администраторы -Member sysadmin
Add-LocalGroupMember -Group "Пользователи удаленного рабочего стола" -Member sysadmin

#echo "$name"

#Создаем пользака с именем компа
New-LocalUser -Name $name -PasswordNeverExpires -Password $pass
$login = Get-LocalUser -Name $name
#echo "$login"
Add-LocalGroupMember -Group Администраторы -Member $login
Add-LocalGroupMember -Group "Пользователи удаленного рабочего стола" -Member $login


А работает оно так потому что
>Get-Help Get-LocalUser -Full
...
ВЫХОДНЫЕ ДАННЫЕ
    System.Management.Automation.SecurityAccountsManager.LocalUser[]
        This cmdlet returns local user accounts.

>Get-Help Add-LocalGroupMember  -Full
...
ПАРАМЕТРЫ
    -Member <Microsoft.PowerShell.Commands.LocalPrincipal[]>
        Specifies an array of users or groups that this cmdlet adds to a security group. You can specify users or groups by name, security ID (SID), or LocalPrincipal objects.

При этом
>$lu = Get-LocalUser Administrator
>$lu.GetType()
Microsoft.PowerShell.Commands.LocalPrincipal
>$lu.psobject.typenames
Microsoft.PowerShell.Commands.LocalUser
Microsoft.PowerShell.Commands.LocalPrincipal

LocalUser - наследник LocalPrincipal

То есть, если в качестве Member передавать нативный объект, всё работает как часы
А если строку, то эта строка неверно преобразуется в объект.
Вот так легко создаётся LocalPricipal из имени компа.
[Microsoft.PowerShell.Commands.LocalPrincipal]::new($env:COMPUTERNAME)

Если залезть в исходники
AddLocalGroupMemberCommand.cs
Sam.cs
То во второй ссылке есть вызов получения сида из имени. видимо, именно он при одинаковых вводных сначала запрашивает компы, а потом юзеров
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы