【发布时间】:2010-12-28 18:40:36
【问题描述】:
我想要一份包含所有本地用户及其相关组(用户、高级用户、管理员等)的报告。
我是这样获取用户的:
$adsi = [ADSI]"WinNT://."
$adsi.psbase.children | where {$_.psbase.schemaClassName -match "user"} | select @{n="Name";e={$_.name}}
但我不知道如何检索他们的组。提前致谢。
【问题讨论】:
我想要一份包含所有本地用户及其相关组(用户、高级用户、管理员等)的报告。
我是这样获取用户的:
$adsi = [ADSI]"WinNT://."
$adsi.psbase.children | where {$_.psbase.schemaClassName -match "user"} | select @{n="Name";e={$_.name}}
但我不知道如何检索他们的组。提前致谢。
【问题讨论】:
对于 Google 员工,获取用户列表的另一种方法是使用:
Get-WmiObject -Class Win32_UserAccount
【讨论】:
$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 ';'}}
}
【讨论】:
更新作为 2010 年优秀答案的替代方案:
您现在可以使用Microsoft.PowerShell.LocalAccounts module 中的Get-LocalGroupMember、Get-LocalGroup、Get-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
【讨论】:
扩展 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-LocalGroup | %{ $groups = "$(Get-LocalGroupMember -Group $_.Name | %{ $_.Name } | Out-String)"; Write-Output "$($_.Name)>`r`n$($groups)`r`n" }
【讨论】:
使用它来获取包含本地用户及其所属组的数组:
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"
}
}
【讨论】: