すべてのローカルユーザーとその関連グループ(ユーザー、パワーユーザー、管理者など)のレポートを作成したいと思います。
このようにしてユーザーを取得します。
$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 ';'}}
}
Google社員の場合、ユーザーのリストを取得する別の方法は次を使用することです。
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と組み合わせることもできます。別名glも代わりに使用できます。ほとんどの新しい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