Active Directory

【Active Directory】PowerShellでオブジェクト一覧を取得する

2018年5月28日


Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

こんにちは!そーまんです。

今回は、Active Directory でオブジェクトをまとめて取得する方法やファイルにエクスポートする方法について書いてみました。


PowerShell で AD オブジェクトを取得すると楽できる

Active Directory を担当されている方であれば分かると思いますが、社内のコンピューターアカウントや、ユーザーアカウントの一覧を出してほしいとか依頼があったりします。

数が少なければ良いのですが、さすがに画面を見て Excel などに一個一個手入力する事は、アカウントの数が多いと時間がかかってしまいますよね。入力ミスの可能性もありますし非効率です。

ユーザー名やコンピューター名のみであれば、Active Directory ユーザーとコンピューターのスナップインからエクスポートできます。

しかし、Active Directory のオブジェクト、例えばコンピューターアカウントであれば Windows のバージョンや、ユーザーアカウントであればパスワードの有効期限日などを取り出したい時があるかと思います。

そういった情報を必要な分だけ取得して一覧表示したい場合や、またファイルにエクスポートしたい場合、 Active Directory ユーザーとコンピューターのスナップインからはできませんが、PowerShell にはそういった事が可能です。

ここでは PowerShell を使って AD のコンピューターやユーザーアカウントのオブジェクトから情報を抜き出して一覧表示したりエクスポートする方法について説明しています。皆様のお役に立てれば幸いです。

個人的な観点ですが、視認性を向上する為にコマンドレットの内容が長いものは、シングルクォーテーションで区切って複数行にして書いています。


Get-ADComputerでコンピューターアカウントを取得する

Get-ADComputer コマンドレットを使い、Active Directory のユーザーを参照する事ができます。

以下のコマンドは、全てのコンピューターアカウントを取得し、Windows Server 2016 の分のみを取得し結果を整形して CSV ファイルで出力しています。

一覧をコンソールに出力する

  • Get-ADComputer はドメインに参加しているコンピューターアカウントを取得するコマンドレット
  • 全てのコンピューターアカウントのプロパティをフィルタして取得
  • -Filter を使って、取得したコンピューターアカウントを -Property を使い、属性を表示
  • パイプラインを使って Format-Table で指定した属性(例えばコンピューターアカウント名や OS の名前など)をテーブルに自動で整形して出力


上の内容を少し変えてみたいので、全てフィルタするのではなく、-Like を使って特定の名前を検索してみます。

-Like はワイルドカードを使って検索するのですが、半角のアスタリスク * を使います。


今度は、-Like を使って「オペレーティングシステムのバージョンが 10 より大きい」という条件で検索してみます。


出力した内容を CSV 形式でファイルにしてエクスポートする

出力した内容が多い場合や、データとして保存・加工したい場合はファイルにエクスポートする事ができます。

Export-CSV コマンドレットは、出力したデータをコンマ区切りでエクスポートします。

NoTypeInformation は出力後のファイルを開いた時に、一番上に表示される情報になります。私は不要なので -NoTypeInformation を付けています。

Encoding UTF-8 は文字化け対策になります。


実行結果は以下のようになります。


Get-ADUserでユーザーアカウントを取得する

Get-ADUser コマンドレットを使い、Active Directory のユーザーを取得する事ができます。

以下のコマンドは、全てのユーザーアカウントを取得し、ユーザーがいつパスワードを変更したかを日時で取得し、またパスワードの期限が無期限かどうかを取得しています。

一覧をコンソールに出力する

パイプラインを使って Format-Table で指定した属性(上記で取得したもの)をテーブルに自動で整形して出力します。


また、パスワードの有効期限が切れる日 (有効期限日) を出力したい場合、-Properties で msDS-UserPasswordExpiryTimeComputed スキーマ属性を使います。


パスワードの有効期限が切れる日が、日付のフォーマットではなく、長い桁の数字で返ってきました。

msDS-UserPasswordExpiryTimeComputed はタイムスタンプ属性で、返り値は 整数型のようです。

ですのでこれを日付型に変換してあげる必要があります。

以下のサイトを参考にさせて頂きました。(リンクが別ウィンドウで開きます。)


ちゃんと日付型で返ってきました。今度は PasswordNeverExpires のステータスが無効になっているユーザーアカウントを出力してみます。


PasswordNeverExpires のステータスが無効になっているユーザーの一覧が取得できました。では最後に、これを CSV フォーマットでファイルに出力してみます。


出力した内容を CSV 形式でファイルにしてエクスポートする

出力した内容が多い場合や、データとして保存・加工したい場合はファイルにエクスポートする事ができます。

Export-CSV コマンドレットは、出力したデータをコンマ区切りでエクスポートします。

NoTypeInformation は出力後のファイルを開いた時に、一番上に表示される情報になります。私は不要なので -NoTypeInformation を付けています。また、Encoding UTF-8 は文字化け対策になります。


実行結果は以下のようになります。


まとめ

以上になります。いかがでしょうか。

PowerShell でこのような事ができますと便利ですよね。上司から「パスワードの有効期限が無期限になっているユーザーがいるか確認してもらえるかな」と言われても、Active Directory ユーザーとコンピューターでアカウント毎に確認しなくても、PowerShell で迅速に対応ができます。

このような事ができればコンピューターやユーザーアカウントの棚卸しにも応用ができますよね。

では最後までお読みいただきありがとうございました!

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-Active Directory
-,


Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637

Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637