powershell - 列出本地用户及其组

时间:2010-12-28 18:40:37

标签: powershell user-accounts

我想要与所有本地用户及其相关群组(用户,超级用户,管理员等)进行报告。

我以这种方式获得用户:

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

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

6 个答案:

答案 0 :(得分:34)

对于Google员工,另一种获取用户列表的方法是使用:

Get-WmiObject -Class Win32_UserAccount

来自http://buckeyejeeps.com/blog/?p=764

答案 1 :(得分:30)

$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 ';'}}
}

答案 2 :(得分:15)

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

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

示例:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="BCPDetails.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="mydate" runat="server"></asp:TextBox>
        <asp:TextBox ID="anotherdate" type="date" runat="server" </asp:TextBox>
    </div>
    </form>
</body>
</html>

您可以将其与Get-LocalUser结合使用。也可以使用别名 glu 。大多数新cmndlet都存在别名。

如果有人想知道(我知道你没有问过这个) 添加用户可以像这样完成:

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  

答案 3 :(得分:0)

扩展mjswensen的答案,不使用过滤器的命令可能要花费几分钟,但是过滤后的命令几乎是即时的。

PowerShell-列出本地用户帐户

快速方式

while(model.getSolver().solve()

慢速

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

答案 4 :(得分:0)

尝试这个:),

Get-LocalGroup | %{ $groups = "$(Get-LocalGroupMember -Group $_.Name | %{ $_.Name } | Out-String)"; Write-Output "$($_.Name)>`r`n$($groups)`r`n" }

答案 5 :(得分:0)

使用它来获取包含本地用户及其所属组的数组:

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