powershell-列出本地用户及其组

powershell-列出本地用户及其组,powershell,user-accounts,Powershell,User Accounts,我希望有一份所有本地用户及其相关组(用户、超级用户、管理员等)的报告 我通过以下方式获得用户: $adsi = [ADSI]"WinNT://." $adsi.psbase.children | where {$_.psbase.schemaClassName -match "user"} | select @{n="Name";e={$_.name}} 但是我不知道如何检索他们的群组。提前谢谢。对于谷歌,获取用户列表的另一种方法是使用: $adsi = [ADSI]"WinNT://$env

我希望有一份所有本地用户及其相关组(用户、超级用户、管理员等)的报告

我通过以下方式获得用户:

$adsi = [ADSI]"WinNT://."
$adsi.psbase.children | where {$_.psbase.schemaClassName -match "user"} | select @{n="Name";e={$_.name}}

但是我不知道如何检索他们的群组。提前谢谢。

对于谷歌,获取用户列表的另一种方法是使用:

$adsi = [ADSI]"WinNT://$env:COMPUTERNAME"
$adsi.Children | where {$_.SchemaClassName -eq 'user'} | Foreach-Object {
    $groups = $_.Groups() | Foreach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
    $_ | Select-Object @{n='UserName';e={$_.Name}},@{n='Groups';e={$groups -join ';'}}
}
Get-WmiObject -Class Win32_UserAccount

更新,作为2010年优秀答案的替代:

现在可以使用Get-LocalGroupMember、Get-LocalGroup、Get-LocalUser等来获取和映射用户和组

例如:

PS C:\WINDOWS\system32> Get-LocalGroupMember -name users

ObjectClass Name                             PrincipalSource 
----------- ----                             --------------- 
User        DESKTOP-R05QDNL\someUser1        Local           
User        DESKTOP-R05QDNL\someUser2        MicrosoftAccount
Group       NT AUTHORITY\INTERACTIVE         Unknown  
您可以将其与Get LocalUser结合使用。也可以使用别名glu。大多数新CMNDlet都存在别名

如果有人想知道(我知道你没有问过这件事) 例如,可以这样添加用户:

$description = "Netshare user"
$userName = "Test User"
$user = "test.user"
$pwd = "pwd123"

New-LocalUser $user -Password (ConvertTo-SecureString $pwd -AsPlainText -Force) -FullName $userName -Description $description

根据mjswensen的回答,不带过滤器的命令可能需要几分钟,但过滤后的命令几乎是即时的

PowerShell-列出本地用户帐户

捷径

Get-WmiObject -Class Win32_UserAccount -Filter  "LocalAccount='True'" | select name, fullname
慢行

Get-WmiObject -Class Win32_UserAccount |? {$_.localaccount -eq $true} | select name, fullname
试试这个:)


使用此选项可获取包含本地用户及其所属组的数组:

Get-LocalUser | 
    ForEach-Object { 
        $user = $_
        return [PSCustomObject]@{ 
            "User"   = $user.Name
            "Groups" = Get-LocalGroup | Where-Object {  $user.SID -in ($_ | Get-LocalGroupMember | Select-Object -ExpandProperty "SID") } | Select-Object -ExpandProperty "Name"
        } 
    }
要获取包含本地组及其成员的数组,请执行以下操作:

Get-LocalGroup | 
    ForEach-Object {
        $group = $_
        return [PSCustomObject]@{ 
            "Group"   = $group.Name
            "Members" = $group | Get-LocalGroupMember | Select-Object -ExpandProperty "Name"
        } 
    } 

您希望将筛选器添加到该查询以仅列出本地帐户:-筛选器“LocalAccount=True”请注意,这是可用的,因为PowerShell 5.1.Get-LocalUser是正确的cmdlet。Get LocalUsers不存在
Get-LocalGroup | 
    ForEach-Object {
        $group = $_
        return [PSCustomObject]@{ 
            "Group"   = $group.Name
            "Members" = $group | Get-LocalGroupMember | Select-Object -ExpandProperty "Name"
        } 
    }