我正在尝试Users
从计算机中删除组中除NT Authority
帐户以外的所有用户。我想从组用户中获取用户列表,并使用该列表从计算机中删除配置文件。
我不是 PowerShell 专家,所以这不是我的强项。
$users = Get-LocalGroupMember Users
ForEach ($user in $users) {
Remove-LocalUser -Name $user
}
只有来自的名称Get-LocalGroupMember
似乎与Remove-LocalUser
要删除的内容不匹配,有什么解决方案吗?
如果运行,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
不应删除这些用户。无论如何,我不认为您甚至可以轻松删除它们。
至于为什么它不适用于 Name 属性:Get-LocalGroupMember
似乎以这种格式返回 NameComputer\UserName
而Remove-LocalUser
似乎只接受该格式UserName
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句