我有以下脚本应该从服务器中删除成员:
$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"
那么如何将这个模块集成到我的脚本中呢?
这是一个令人遗憾的情况汇合:当你这样做的时候
$role.Members.Add("member")
这是有效的,因为在水下,字符串"member"
被PowerShell隐式转换为RoleMember
,其中Name
为member
,空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
- 该cmdlet是completely different module的一部分,并从本地Windows组中删除成员,而不是SSAS角色。