如何使用Remove-LocalGroupMember从服务器中删除?

时间:2019-03-13 14:31:11

标签: powershell

我有以下脚本应该从服务器中删除成员:

$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 个答案:

答案 0 :(得分:1)

不幸的是,情况融合在一起:

$role.Members.Add("member")

之所以可行,是因为在水中,字符串"member"被PowerShell隐式转换为RoleMemberName且为空的member的{​​{1}} 。一切都很好。但是,如果您这样做

Sid

什么都没有发生,因为您将创建一个 new $role.Members.Remove("member") 实例,并且由于RoleMember没有实现RoleMember(相当奇怪的疏忽),因此实例永远不会被认为是相同的。

这意味着您可以通过获取集合中的实际实例(或我想是通过索引)来删除成员:

.Equals()

请注意,如果没有这样的成员,您将不会收到错误消息(因为$member = $role.Members.Where{$_.Name -eq "member"} | Select -First 1 $role.Members.Remove($member) 允许Remove,这又是一个非常奇怪的疏忽),因此您可能要检查{{1} },如果您要验证。

绝对不要使用$null - cmdlet是completely different module的一部分,并且将从本地Windows组而不是SSAS角色中删除成员。