web-dev-qa-db-ja.com

powershell-ローカルユーザーとそのグループを一覧表示する

すべてのローカルユーザーとその関連グループ(ユーザー、パワーユーザー、管理者など)のレポートを作成したいと思います。

このようにしてユーザーを取得します。

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

しかし、私は彼らのグループを取得する方法がわかりません。前もって感謝します。

24
Nicola Cossu
$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 ';'}}
}
30
Shay Levy

Google社員の場合、ユーザーのリストを取得する別の方法は次を使用することです。

Get-WmiObject -Class Win32_UserAccount

から http://buckeyejeeps.com/blog/?p=764

35
mjswensen

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
15
Iris Classon

Mjswensenの答えを拡張すると、フィルターなしのコマンドには数分かかる場合がありますが、フィルター処理されたコマンドはほとんど瞬時です。

PowerShell-ローカルユーザーアカウントの一覧表示

速い方法

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

遅い方法

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