Powershell;通过 Get-LocalGroupMember 从计算机中删除用户

Powershell;通过 Get-LocalGroupMember 从计算机中删除用户

我正在尝试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

相关内容