Теперь, прежде чем я начну, я дам вам секрет:
это на контроллере домена.
*Группа SID для администраторов не отображается в учетной записи участника
* Вышеуказанное заявление пострадавшего из-за ненужности, как единственным существенным изменением, которое происходит в локальной учетной записи администратора и группы Local Administrator (в пределах контекста и рамки данного вопроса) минимальна и не изменяет результат достаточно, чтобы требовать дифференциации.
у меня не было такого рода проблемы на любом из других серверов и я готов ставку, что причина это потому, что он находится на DC. *
* По той же причине, что и указано выше. Принятый ответ объясняет несогласованность и был надзором с моей стороны, а не архитектурой (см. функции) контроллеров безопасности Windows или контроллеров домена.
Я размышлял над тем, как проверить, был ли сценарий вызван из учетной записи, которая является либо локальным администратором, либо, по крайней мере, вызвана учетной записью, которая является частью Группа местных администраторов.
Я переименовал локальную учетную запись администратора, однако, я знаю, что я могу видеть, если сценарий был вызван локальной учетной записью администратора, набрав:
(New-Object System.Security.Principal.NTAccount('reserved')).Translate([System.Security.Principal.SecurityIdentifier]).Value
и я могу видеть, если SID заканчивается в -500
,
Проблема возникает, когда я бегу условие, чтобы увидеть, если вызывающий счет является частью группы администраторов (который является больше сфера), набрав:
PS> [bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).Groups -match "S-1-5-32-544")
PS> False
Быстрая проверка, чтобы увидеть какой счет был с помощью:
PS> $env:username
PS> reserved
или излишне сложным путем (хотя я предпочитаю его иногда):
PS> Write-Host ((Get-WmiObject Win32_Account | ?{$_.SID.Substring($_.SID.Length-4,4) -eq '-500'}).Caption).Split("\",2)[1] -fore GREEN
PS> reserved
и я даже тип:
PS> net user reserved
, где он говорит мне Local Group Memberships *Administrators
.
Я подтягиваю ADUC (dsa.msc
), и я смотрю в контейнере Builtin
и дважды нажимаю на группу «Администраторы». Я выбираю тег Members и lo, и вот, reserved
на самом деле участник!
Итак, резюме:
Введя
net user reserved
, я был в состоянии проверить это было частью группы локальных администраторовЯ посмотрел в ADUC и проверены зарезервирован был членом встроенной группы администраторов
Я гарантировал, что зарезервированная действительно была учетной записью локального администратора, подтвердив, что SID началось с
S-1-5...
и закончилась...-500
Чтобы сделать шаг дальше, я убедился, что SID соответствовал группы Active Directory с именем «Администраторы», набрав
Get-ADGroup -Identity "Administrators"
. Затем я набралGet-ADGroupMember -Identity "Administrators"
и удостоверился, что был указанreserved
(это был И SID соответствовал!).Когда я проверяю, обнаружен ли в группе этой учетной записи известный идентификатор группы администраторов (путем получения текущей идентификационной информации Windows), он говорит, что это не так.
Что дает?
Почему у меня есть все признаки того, что он фактически является членом группы локальных администраторов, но этот SID не найден в группах учетной записи?
Вы проверили, что значение '[Security.Principal.WindowsIdentity] :: GetCurrent()' и '[Security.Principal.WindowsIdentity] :: GetCurrent(). Группы - это то, что вы думаете? –
@AnsgarWiechers Это то, что происходило, когда я делал '[bool] (([System.Security.Principal.WindowsIdentity] :: GetCurrent()). Группы -match« S-1-5-32-544 »). Это поиск текущего идентификатора Windows (зарезервированный), поиск идентификаторов SID групп и просмотр найденного известного SID для администраторов (S-1-5-32-544). Он возвратил 'false'. – Rincewind