我有以下脚本应该从服务器中删除成员:
$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"
那么我如何将该模块集成到我的脚本中?
答案 0 :(得分:1)
不幸的是,情况融合在一起:
$role.Members.Add("member")
之所以可行,是因为在水中,字符串"member"
被PowerShell隐式转换为RoleMember
为Name
且为空的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角色中删除成员。