LoginSignup
4
7

More than 5 years have passed since last update.

PowerShellでWMIからユーザ情報取得する(csv)

Posted at

はじめに

なんでActive Directoryじゃないの、というつっこみはなしでお願いします(;>ω<)
WMIからユーザ名を取得して、ner user で地道に情報を取得しています。

出力形式

YYYYMMDD_サーバ名.csv
"ユーザ名","アカウント有効","最終パスワード変更日時","パスワード有効期間","最終ログオン日時","所属グループ"
"Administrator","Yes","2015/09/01","2015/10/13","2015/09/17","*Administrators "

ソース

userdataList.ps1
#出力パス作成
$d = Get-Date -Format "yyyyMMdd"
$mypath = Split-Path $myInvocation.MyCommand.Path -Parent
$path = $mypath + $d + "_" + $env:computerName + ".csv"

#WMIを取り出す
$WMIResult = Get-WmiObject -q "SELECT Name From Win32_UserAccount Where LocalAccount=True"

#カスタムオブジェクト(要素の入れ物)
$Datas = New-Object System.Collections.ArrayList

$WMIResult | %{ ($_.name) } | %{

        # カスタムオブジェクトの要素作成
        $Data = New-Object PSObject | Select-Object ユーザ名, アカウント有効, 最終パスワード変更日時,パスワード有効期間,最終ログオン日時,所属グループ

        #ユーザ情報の取得
        $detailUser = net user $_

        #カスタムオブジェクトの要素に値を設定
        $Data.ユーザ名 =  ($detailUser[0] -replace '\s+','■').Split("■")[1]     
        $Data.アカウント有効 =  ($detailUser[5] -replace '\s+','■').Split("■")[1]  
        $Data.最終パスワード変更日時 = ($detailUser[8] -replace '\s+','■').Split("■")[1]     
        $Data.パスワード有効期間 = ($detailUser[9] -replace '\s+','■').Split("■")[1] 
        $Data.最終ログオン日時 = ($detailUser[18] -replace '\s+','■').Split("■")[1] 

        #ローカルグループは可変なので、直後のグローバルグループの開始位置を取得する
        #初期値
        $count = 0

        $ln = foreach($e In $detailUser){if ($e -match "グローバル"){$count}$count += 1}
        $joinGroup = ""
        for ($i=0; $i -lt ($ln - 22) ; $i++){

           $hoge = ($detailUser[22+$i] -replace '\s+','')
           $joinGroup += $hoge.Substring($hoge.IndexOf("*")) + " "

        }

        $Data.所属グループ = $joinGroup

        # カスタムオブジェクトに要素を追加
        [void]$Datas.Add($Data)    

 } 
 $Datas |Export-Csv -Path $path -EnCoding default -Force -NoTypeInformation

カスタム

他の情報が必要な場合は、下記をもとに「カスタムオブジェクトの要素作成/値を設定」辺りを変更します。

行番号($detailUser) 情報($Data.)
0 ユーザー名
1 フル ネーム
2 コメント
3 ユーザーのコメント
4 国コード
5 アカウント有効
6 アカウントの期限
7 (空行)
8 最終パスワード変更日時
9 パスワード有効期間
10 パスワード次回変更可能日時
11 パスワードあり
12 ユーザーによるパスワード変更可能
13 (空行)
14 ログオン可能なワークステーション
15 ログオン スクリプト
16 ユーザー プロファイル
17 ホーム ディレクトリ
18 最終ログオン日時
19 (空行)
20 ログオン可能時間
21 (空行)
22 所属しているローカル グループ
所属しているグローバル グループ
4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7