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

问题描述 投票:1回答:1

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

$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"

那么如何将这个模块集成到我的脚本中呢?

powershell
1个回答
1
投票

这是一个令人遗憾的情况汇合:当你这样做的时候

$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 - 该cmdlet是completely different module的一部分,并从本地Windows组中删除成员,而不是SSAS角色。

© www.soinside.com 2019 - 2024. All rights reserved.