【问题标题】:powershell - list local users and their groupspowershell - 列出本地用户及其组
【发布时间】:2010-12-28 18:40:36
【问题描述】:

我想要一份包含所有本地用户及其相关组(用户、高级用户、管理员等)的报告。

我是这样获取用户的:

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

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

【问题讨论】:

    标签: powershell user-accounts


    【解决方案1】:

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

    Get-WmiObject -Class Win32_UserAccount
    

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

    【讨论】:

    • 您想将过滤器添加到该查询以仅列出本地帐户:-filter "LocalAccount = True"
    【解决方案2】:
    $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 ';'}}
    }
    

    【讨论】:

      【解决方案3】:

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

      您现在可以使用Microsoft.PowerShell.LocalAccounts module 中的Get-LocalGroupMemberGet-LocalGroupGet-LocalUser 等来获取和映射用户和组,在 PowerShell 5.1 及更高版本中可用。

      例子:

      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 代替。大多数新 cmdlet 都存在别名。

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

      $description = "Netshare user"
      $userName = "Test User"
      $user = "test.user"
      $pwd = "pwd123"
      
      New-LocalUser $user -Password (ConvertTo-SecureString $pwd -AsPlainText -Force) -FullName $userName -Description $description
      

      【讨论】:

      • 谢谢,@DavidMiguel - 我已将此信息添加到答案中。
      • 谢谢,@Vish - 我已经相应地更新了答案。
      【解决方案4】:

      扩展 mjswensen 的答案,没有过滤器的命令可能需要几分钟,但过滤后的命令几乎是即时的。

      PowerShell - 列出本地用户帐户

      快捷方式

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

      慢慢来

      Get-WmiObject -Class Win32_UserAccount |? {$_.localaccount -eq $true} | select name, fullname
      

      【讨论】:

        【解决方案5】:

        试试这个:),

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 2012-05-04
            • 1970-01-01
            • 2017-02-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-17
            • 1970-01-01
            相关资源
            最近更新 更多