Powershellで ローカルグループ名と所属するユーザー名を、カンマ区切りで出力する

前提:Powershell ver5.1以上であること。(Get-LocalGroupはver5.1以降のコマンドレット) Powershell ver2.0以上でも使えるように、一番下に追記しています!!!!


ローカルグループ名と所属するユーザー名を、カンマ区切りで出力する(ver5.1以上)


#### ローカルグループ名と所属するユーザー名を、カンマ区切りで出力するコード[#ここから#]


# ローカルグループ名を配列に格納
$group_name_list=(Get-LocalGroup).name


# 配列に格納したローカルグループ名を、1つ1つ取り出して処理するループ
foreach ($group_name in $group_name_list) {

 
    # 取り出したローカルグループ名に所属するユーザー名を、配列に格納
    $group_member_list=(Get-LocalGroupMember $group_name).name


        # 配列に格納したユーザー名を、1つ1つ取り出して処理するループ
        foreach ($group_member in $group_member_list) {

            # ローカルグループ名とユーザー名をカンマ区切りにして標準出力する
            echo "$group_name,$group_member"


        # 配列に格納したユーザー名を、1つ1つ取り出して処理するループ[終了]
        }


# 配列に格納したローカルグループ名を、1つ1つ取り出して処理するループ[終了]
}


#### ローカルグループ名と所属するユーザー名を、カンマ区切りで出力するコード [#ここまで#]





<# 結果出力の例 (EC2)

Administrators,EC2AMAZ-HELH38R\Administrator
Guests,EC2AMAZ-HELH38R\Guest
Guests,EC2AMAZ-HELH38R\Gutest
System Managed Accounts Group,EC2AMAZ-HELH38R\DefaultAccount
Users,EC2AMAZ-HELH38R\Gutest
Users,NT AUTHORITY\Authenticated Users
Users,NT AUTHORITY\INTERACTIVE

#>

参考:ワンライナー

(Get-LocalGroup).name |%{$group_name=$_;(Get-LocalGroupMember $group_name).name|%{echo "$group_name,$_"}}



Powershell ver2.0以上であれば使えるコード

# WMIオブジェクトのWin32_GroupUserクラスを呼び出す。その中からグループ名と所属ユーザー名を取り出して表にする(Select-Object)
$groupuser = Get-WmiObject Win32_GroupUser |Select-Object GroupComponent,PartComponent

# 取り出したグループ名と所属ユーザー名の表を1行ずつ処理するループ
foreach ($record in $groupuser) {

    # グループ名以外の情報を削る。(GroupComponent列の値をカンマ区切りにして、2つ目がグループ名になる。「Name=」を置換して消す。)
    $group=($record.GroupComponent.split(",")[1].replace("Name=",""))

    # ユーザー名以外の情報を削る。(PartComponent列の値をカンマ区切りにして、2つ目がユーザー名になる。「Name=」を置換して消す。)
    $member=($record.PartComponent.split(",")[1].replace("Name=",""))

    # CSV形式にして出力
    echo "$group,$member"

# 取り出したグループ名と所属ユーザー名の表を1行ずつ処理するループ[終了]
}


<# 結果

"Administrators","Administrator"
"Guests","Guest"
"Guests","Gutest"
"System Managed Accounts Group","DefaultAccount"
"Users","INTERACTIVE"
"Users","Authenticated Users"
"Users","Gutest"

#>

参考:ワンライナー

Get-WmiObject Win32_GroupUser |
Select-Object GroupComponent,PartComponent |
%{$group=($_.GroupComponent.split(",")[1].replace("Name=",""));$member=($_.PartComponent.split(",")[1].replace("Name=",""));echo "$group,$member"}

bitFlyer ビットコインを始めるなら安心・安全な取引所で