我正在尝试Users
从计算机中删除除NT Authority
帐户之外的组中的所有用户。我想从组用户中获取用户列表,并使用该列表从计算机中删除配置文件。
我不是 PowerShell 专家,所以这不是我的强项。
$users = Get-LocalGroupMember Users
ForEach ($user in $users) {
Remove-LocalUser -Name $user
}
只是名称Get-LocalGroupMember
似乎与要删除的内容不匹配Remove-LocalUser
,有什么解决办法吗?
答案1
如果您运行,Get-LocalGroupMember Users | fl *
您可以看到 cmdlet 返回的所有属性。
PS C:\WINDOWS\system32> Get-LocalGroupMember Users | fl *
Name : NT-AUTORITÄT\Authentifizierte Benutzer
SID : S-1-5-11
PrincipalSource : Unknown
ObjectClass : Gruppe
Name : NT-AUTORITÄT\INTERAKTIV
SID : S-1-5-4
PrincipalSource : Unknown
ObjectClass : Gruppe
Name : SimonS\abctest
SID : S-1-5-21-3159913292-2406416548-3156803696-1008
PrincipalSource : Local
ObjectClass : Benutzer
如果你运行,Get-Help Remove-LocalUser
你会在语法部分看到,有一个 ParameterSet 接受一个SID
,这符合我们的需求,因为我们在返回中得到了它。
PS C:\WINDOWS\system32> Get-Help Remove-LocalUser
SYNTAX
Remove-LocalUser [-InputObject] <LocalUser[]> [-Confirm] [-WhatIf] [<CommonParameters>]
Remove-LocalUser [-Name] <String[]> [-Confirm] [-WhatIf] [<CommonParameters>]
Remove-LocalUser [-SID] <SecurityIdentifier[]> [-Confirm] [-WhatIf] [<CommonParameters>]
这意味着我们可以获取Get-LocalGroupMember
返回的 SID,并将其用于Remove-LocalUser
因此这应该可以解决问题(在提升的 PowerShell 中运行它):
Get-LocalGroupMember Users | Where { $_.PrincipalSource -eq 'Local' } | Foreach { Remove-LocalUser -SID $_.SID }
如您所见,Where-Object
上面的命令中有一个。这应该确保您只删除本地用户,因此NT-Authority
不应删除这些用户。无论如何,我认为您甚至不能如此轻松地删除它们。
至于为什么它不适用于名称属性:Get-LocalGroupMember
似乎以这种格式返回名称Computer\UserName
,而Remove-LocalUser
似乎只接受格式UserName