Как использовать Remove-LocalGroupMember для удаления с сервера? - PullRequest
1 голос
/ 13 марта 2019

У меня есть следующий скрипт, который должен удалить участников с сервера:

$ssasInstance = ""
$accountName= ""
Import-Module SqlServer
[Microsoft.AnalysisServices.Server]$SSASserver = New-Object ([Microsoft.AnalysisServices.Server])
$SSASserver.Connect($ssasInstance) 
$role= $SSASserver.Roles["Administrators"]
$role.Members.Remove($accountName)
$role.Update()

Проблема по какой-то причине Remove () не работает, ошибки не генерируются, но пользователь не удаляется.

Я протестировал скрипт, добавив вместо него пользователя $role.Members.Add($accountName), и это прекрасно работает! так что я знаю, что это должно быть ошибка с remove() методом, и единственный вариант, который у меня есть, это использовать Remove-LocalGroupMember

Я пытался просто использовать это так:

$ssasInstance = ""
$accountName= ""
Import-Module SqlServer
[Microsoft.AnalysisServices.Server]$SSASserver = New-Object ([Microsoft.AnalysisServices.Server])
$SSASserver.Connect($ssasInstance) 
$role= $SSASserver.Roles["Administrators"]
Remove-LocalGroupMember -Group "Administrators" -Member "$accountName"
$role.Update()

но это тоже не работает ... хотя я думаю, что это потому, что он не знает точно, где его удалить из ...

Я тоже это пробовал, но безрезультатно:

Remove-LocalGroupMember -Group "$role" -Member "$accountName"

Так, как я могу интегрировать этот модуль в мой скрипт?

1 Ответ

1 голос
/ 13 марта 2019

Это прискорбное стечение обстоятельств: когда вы делаете

$role.Members.Add("member")

Это работает, потому что под водой строка "member" неявно преобразуется PowerShell в RoleMember с Namemember и пустой Sid.Все хорошо.Однако, если вы затем выполните

$role.Members.Remove("member")

Ничего не произойдет, потому что вы создадите новый RoleMember экземпляр, а поскольку RoleMember не имеет реализации .Equals() (довольностранный недосмотр), разные экземпляры никогда не будут считаться одинаковыми.

Это означает, что вы можете только удалять элементы, получая фактический экземпляр в коллекции (или, я полагаю, по индексу):

$member = $role.Members.Where{$_.Name -eq "member"} | Select -First 1
$role.Members.Remove($member)

Обратите внимание, что вы не получите сообщение об ошибке, если такого члена нет (потому что Remove допускает $null, опять же в довольно странном надзоре), поэтому вы можете проверить наличие $member -eq $nullесли вы хотите это проверить.

Определенно не используйте Remove-LocalGroupMember - этот командлет является частью совершенно другого модуля и удаляет участников из локальных групп Windows, а не ролей SSAS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...