我得到一个PowerShell命令,给我一个用户列表和这些用户所属的组。 唯一的问题是,这是给我的每一个用户,包括那些被禁用的。 我需要能够列出活动用户及其各自的组。 任何帮助,将不胜感激。
$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 ';'}} } | Format-Table -autosize -wrap
您可以使用WMI查询来获取AccountType(512 =启用,514 =禁用):
编辑:有其他标志表示启用帐户,但基本启用/禁用是512/514。 请参阅此列表 。
第三次尝试:
Function Check-Enabled ($Username) { -not (Get-WmiObject Win32_UserAccount -filter "LocalAccount=True AND Name='$Username'").disabled }
然后将该属性添加到您的Select-Object 。 我也为了自己的可读性对它进行了格式化,但是仍然是相同的代码:
$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 ';'}}, @{n='Enabled';e={Check-Enabled $_.Name}} } | Format-Table -autosize -wrap
与WMI更容易的方法
Get-WmiObject -Class win32_useraccount -filter "localaccount=true" | where {$_.disabled -eq $False}