ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:sane53 アクティブディレクトリ登録ユーザーのパスワード失効日について
困り度:
  • すぐに回答を!
ADに登録されているユーザーアカウント一覧を取得し、その中から失効一ヶ月前のものだけをリストアップする方法はありませんか?
net userコマンドで1アカウントずつ調べるには量が多すぎるためできそうにありません。
検索サイトで一通り調べてもみましたが、それらしい情報にたどり着けませんでした。
そこで、このサイトに投稿したのですが、何かよいアイディアがあれば教えていただけないでしょうか。
よろしくお願いします。
質問投稿日時:08/03/27 00:49
質問番号:3898068
最新から表示回答順に表示

回答

 

回答者:bin-chan EXCEL等、表計算ソフトはお手元にありますか?以下、EXCELとして進めます。
第一段階で使用するのはEXCEL、メモ帳、エクスプローラです。

test1.txt をEXCELで開いてください。「ユーザ名だけ」が列Aに出る予定。うまく行きますね?
おっと、ユーザ名は一行一件で改行、で良いでしょうか?例としては3ユーザとしますよ。
username1<改行>
username2<改行>
username3<改行> みたいな感じ。

次にセルB1に、式[="net user " & A1 & " >> C:\RESULT.txt"]を入力し確定。セルB1が[net user username1 >> C:\RESULT.txt]になります。

セルB1を囲む罫線の右下隅が■になってるので、■をマウスポインタでダブルクリック。これでユーザ名すべての行の列B(B1〜B3)に式がコピーされます。

そのまま(セルB1〜セルB<データ行数、ここではB3>が選択された状態)で、Ctrl+Cキーを押下。目には見えませんが「クリップボード」にコピーされます。

ここでメモ帳を開いてください。開いたらCtrl+Vで貼り付け。以下のような値になる筈。
net user username1 >> C:\RESULT.txt
net user username2 >> C:\RESULT.txt
net user username3 >> C:\RESULT.txt

メモ帳の内容を、「名前を付けて保存」で保存。 名前を "C:\ExecBatch.cmd" とでもして、保存してください。必ず""で囲むこと。
保存したらメモ帳は閉じてください。

エクスプローラで、C:\に作成された ExecBatch.cmd をダブルクリックで起動。コマンドプロンプトが開き実行される筈。止まったら[×]で閉じてください。
結果は、C:\RESULT.txt にリダイレクトされている筈。メモ帳で開いて確認してください。
username1からusername3までの3アカウント情報が作成されていたら第一段階は成功。

EXCELも閉じてOKです。保存はしてもしなくても、適宜判断ください。

第二段階で FINDを使用 と書きましたが、RESULT.txtのまま、ACCESSなどのDBか、EXCELで一気に取り込んでもOKです。
EXCELでオートフィルタを利用した方が簡単かも。
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/03/28 01:06
回答番号:No.2
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼連絡が遅くなり申し訳ありません・・・
無事抽出することができましたのでご報告します。
いろいろアドバイスしていただき、ありがとうございました。

回答

 

回答者:bin-chan > アイディアがあれば
ということで。

> 量が多すぎるためできそうにありません。
が何万件なのか、にもよりますけどね。

【第一段階】
「net userコマンドで1アカウントごとの情報を取得し、リダイレクトでファイル化する」を、全ユーザ数繰り返すバッチ処理を作成する。
リダイレクトのファイルは同じものをAppendで使用。

【第二段階】
【第一段階】のリダイレクトで作成されたファイルはテキストファイルなので、FINDコマンドで、/nオプションを指定した上で「ユーザー名」を含む行と「パスワード有効期間」を含む行を抽出する。
(別々のファイルとすること)

【第三段階】
【第二段階】で抽出されたファイルをそれぞれDB化する。(EXCELでもOK)
/nで取得した行番号順にソートされているが、(オートナンバー等で)連番を付与する。
(「ユーザー名」も「パスワード有効期間」もそれぞれ1〜レコード数最大値までとなるように)

パスワード有効期間の範囲を指定すれば「連番」が明らかになるので、「ユーザー名」の連番が一致するものをリスト化すれば、目的のデータが得られる。


ではいかがでしょうか?
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/27 01:11
回答番号:No.1
この回答への補足早速のご回答、ありがとうございます。

【第一段階】のとおり全ユーザーリストを出力するため

 for /f %%a in (c:\test.txt) do net user %%a >> test1.txt

を実行しているのですがまったく出力されませんでした。
そこで、echoをonにしたところ

C:\net user sasaki 1>>test1.txt

といった具合にコマンドプロンプトに表示されていました。
何が原因で出力されていないのか、私には見当がつきません・・・。
ですので、よろしければどこか間違っている部分があればご指摘いただけませんでしょうか。

※test.txtにはnet userで出力したアカウント名が記載されています。
 for /f %%a in (c:\test.txt) do net user %%aのコマンドのみを実行した場合は、正常にユーザー情報の詳細が表示されました。

以上、よろしくお願いいたします。
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示