Я новичок в powershell/scripting/life вообще, но, наконец, у меня возникла проблема, которая заслуживает помощи: У меня разные локализации Windows в среде - Английском, финском и русском языках в нынешних условиях, но с возможностью иметь другие локализации в Скандинавии/Европе. Мне нужно добавить пользователей, прошедших проверку подлинности, в группу «Администраторы». Я могу написать его на английском языке:Добавление членов в локальные группы по SID на нескольких языках
NET LOCALGROUP Administrators "Authenticated Users" /add,
но я не буду знать все локализованные имена. Например, на русском языке это были бы «Администраторы» и «Прошедшие Проверку». В кириллице я не настолько силен. Конечно, я знаю SIDs-S-1-5-32-544 для администраторов и S-1-5-11 для пользователей с проверкой подлинности. Однако, работает
NET LOCALGROUP S-1-5-32-544 S-1-5-11 /add returns error that group doesn't exist. Ok, so I found a script to check it -
$objUser = New-Object System.Security.Principal.NTAccount("kenmyer")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Это возвращает ожидаемое значение, настолько хорошее. Тогда я попытался перепроверить его ий бегущую строку, чтобы получить имя от SID -
$Admin = (Get-WMIObject -Class Win32_Group -Filter "LocalAccount=True and SID='S-1-5-32-544'").Name
$Auth = (Get-WMIObject -Class Win32_Group -Filter "LocalAccount=True and SID='S-1-5-11'").Name
И $Admin
= Administratori (как это должно быть), а $Auth
= ничего. Нет имени. И тут я остановился. Я попробовал это и в английской среде, но все еще получил сообщение «нет такой группы». Запуск первой команды, которую я написал, с обоими именами на английском языке - отлично работает.
Любые идеи?
Upd: Возможно, я не могу объяснить правильно, что я пытаюсь сделать, так что скрипт делать разговор:
#Task: to add "Authenticated users" to "Administrators" group in any languange OS.
$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
$objgroup = $objSID.Translate([System.Security.Principal.NTAccount])
$objgroupnameAdm = ($objgroup.Value).Split("\")[1]
$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-11")
$objgroup = $objSID.Translate([System.Security.Principal.NTAccount])
$objgroupnameAuth = ($objgroup.Value).Split("\")[1]
#Administratörer
#Autentiserade användare
net localgroup $objgroupnameAdm $objgroupnameAuth /add
Я стараюсь это на шведском Win7 прямо сейчас. Так результат:
net.exe : Syntaxen för kommandot är:
At line:13 char:4
+ net <<<< localgroup $objgroupnameAdm $objgroupnameAuth /add
+ CategoryInfo : NotSpecified: (Syntaxen för kommandot är::String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Я попытался также положить $objgroupnameAuth
в кавычки, так как он содержит два слова, но это дает тот же результат. Определяемые переменные как строка - без изменений и замена $objGroupNameAdm
с фактическим значением - без изменений.
Если бы я не мог сделать это на английском языке Windows, я бы предположил, что это просто функционально невозможно.
Вы можете также попробовать этот вопрос на SE Security (http://security.stackexchange.com/) – neontapir
Этот ответ должен получить, что вам нужно: http://stackoverflow.com/questions/21288220/get-all-local-members-and-groups-shows-together –
@EricLongstreet, эта ссылка сделала мне еще один шаг - я могу получить оба имени на любом языке. Однако, когда я пытаюсь добавить группу «Проверенные пользователи в группу администраторов», я все равно получаю сообщение об ошибке «Не может быть сделано, потому что пользователь не существует». Сценарий по-прежнему работает на английском языке Windows - либо с «net localgroup», либо «[ADSI]» из [link] (http://blogs.technet.com/b/heyscriptingguy/archive/2010/11/25/use-powershell- to-add-local-users-to-local-groups.aspx). –