現在、Serverspecを使ってWindows Serverのパラメータをチェックするためのテストコードを作成しています。
その中でタイトルの値をPowershellで取りたかったのですが、簡単に書いてくれてる記事がなかったので残しておきます。
GUIで表示されてる通りの、以下の値が取得できます。
- ユーザーは次回ログオン時にパスワードの変更が必要
- ユーザーはパスワードを変更できない
- パスワードを無期限にする
- アカウントを無効にする
- アカウントのロックアウト
ちなみに特定の1ユーザだけで取得したかったので、その前提で書いてます。
複数ユーザで取得する場合は、他の方の記事を参照ください。
Win32_UserAccountオブジェクトからは取得できない
こちらの記事にある通り、Win32_UserAccountのプロパティは、GUIと同じ値は示していません。
比較してみればわかると思います。
ADSIで取得する
ということで、ADSIを使って取得していくわけですが、正直ググってみてもよくわからなくないですか?
私がインフラエンジニアでほとんどコードを書いてこなかったせいもありますが、みんな難しく書きすぎてる気が。。。
ということで、なるべく無駄なものは削って、シンプルに追っていきます。
ADSIにログイン?
ちゃんと調べないまま書いているのですが、ADSIにログイン?みたいなことをします。
こんな感じで。
> [ADSI]("WinNT://ホスト名/ユーザ名")
distinguishedName :
Path : WinNT://ホスト名/ユーザ名
>
上記のような表示が出ればOKです。
UserFlagsを取得する
UserFlagsというパラメータ?を取得します。
> ([ADSI]("WinNT://ホスト名/ユーザ名")).Get("UserFlags")
66051
>
この数字が出力されれば、値は取れたも同然です。
数字を解析する
取得できた数字を解析します。
> 66051 -band 0x800000
0
>
このbandというのは、論理和を取って?います。
まぁサブネットマスクのようなあれですね。
で、bandの後の数字がチェックする項目を表します。
色んな記事で記載されている一覧を引用および抜粋して、私なりの改修を加えると以下になります。
ADS_UF_ACCOUNTDISABLE = 2, // 0x2
⇒アカウントを無効にする
ADS_UF_LOCKOUT = 16, // 0x10
⇒アカウントのロックアウト
ADS_UF_PASSWD_CANT_CHANGE = 64, // 0x40
⇒ユーザーはパスワードを変更できない
ADS_UF_DONT_EXPIRE_PASSWD = 65536, // 0x10000
⇒パスワードを無期限にする
ADS_UF_PASSWORD_EXPIRED = 8388608, // 0x800000
⇒ユーザーは次回ログオン時にパスワードの変更が必要
取得できた数値に、チェックしたい項目の数値と論理和を取ることで、値が設定されているかどうかがわかります。
設定されていれば、上記の10進数の値が返ってきます。
設定されていなければ、0が返ってきます。
サンプル結果
例を挙げて説明すると、以下ということです。
「アカウントを無効にする」にチェックあり
> ([ADSI]("WinNT://ホスト名/ユーザ名")).Get("UserFlags") -band 0x2
2
「アカウントのロックアウト」にチェックなし
> $ADSI = [ADSI]("WinNT://ホスト/ユーザ名")
> $ADSI.Get("UserFlags") -band 0x10
0
「ユーザーはパスワードを変更できない」にチェックなし
> $userflags = $ADSI.Get("UserFlags")
> $userflags -band 0x40
0
「パスワードを無期限にする」にチェックあり
> $userflags -band 0x10000
65536
「ユーザーは次回ログオン時にパスワードの変更が必要」にチェックなし
> $userflags -band 0x800000
0
ちなみに
他の方の記事でborを使ってますが、これは論理積を取っているので、設定をしている(ビットを立てている)ということですね。
頭の良い人が考えたとしか思えないスマートさですね。。。
最後に
この設定項目は、ローカルユーザに対して未だにコマンドレットで取れないと思うので、また使う機会がありそうです。
でもドメインユーザは普通に取れたような?
そもそもADSIって、Active Directory Services Interfacesなんですよね??
それでは。
コメント
コメント一覧 (1件)
[…] 参考リンクhttps://takeda-itsvreng.com/?p=237 […]