ドメイン情報を取得するには?


SK  2005-06-03 20:49:56  No: 122207

ドメイン情報を取得するVBSCRIPTを作成したのですが、
全く初心者で分かりません。

Set objDomain = GetObject("WinNT://ドメイン名")
Set User = GetObject("WinNT://ドメイン名")

i = 1

For each U in User
  If U.Class = "User" Then
    Set objUserName = GetObject("WinNT://ドメイン名" & U.Name)
    objExcel.Cells(i,1).Value = objUserName.name          
    objExcel.Cells(i,2).Value = objUserName.FullName  
    objExcel.Cells(i,3).Value = objUserName.Description   
    objExcel.Cells(i,4).Value = objUserName.AccountDisabled   
    objExcel.Cells(i,5).Value = objUserName.IsAccountLocked  
    objExcel.Cells(i,6).Value = objUserName.PasswordExpired      
    objExcel.Cells(i,7).Value = objUserName.PasswordExpiranationDate  
  End If
  i = i + 1
Next

このようなソースを書いて、Excelに出力させたいのですが、
objUserName.name          
これだけはしっかり出力されます。

しかし、
objUserName.FullName
より下の文が、
実行時エラーで、
Objectでサポートされていないプロパティまたはメソッドです。
というエラーが出てしまっています。

何がいけないのでしょうか。
どうしたらよいのでしょうか?

教えて下さい。


いな  2005-06-03 20:54:55  No: 122208

>Objectでサポートされていないプロパティまたはメソッドです。
>というエラーが出てしまっています。
>
>何がいけないのでしょうか。

定義されていないもしくは正しく定義していない
プロパティやメソットを使おうとした為に、コンパイラが
「そんなものねぇ〜!(-_- #)」といっているわけです。

>どうしたらよいのでしょうか?
  正しく定義をしなおすか。
  存在するプロパティやメソットを使うようにしましょう。

って日本語が読めれば理解できそうな気がするが・・・。


SK  2005-06-03 21:04:10  No: 122209

すぐに回答をありがとうございます。

実は、雑誌で、
Set objDomain = GetObject("WinNT://ドメイン名")
i = 1
For Each obj in objDomain
  objExcel.Cells(i,1).Value = obj.Class
  objExcel.Cells(i,2).Value = obj.Name
  i = i + 1
Next

このようなコードがあって成功したのですが、
より詳しい情報を得たいと思い、
調べてみましたところ、
http://madia.world.coocan.jp/vb/vb_bbs2/200402_04020091.html
これを見つけました。

Excelに出るようにアレンジして成功するかなと思ったらエラーでした。

VBで認識されていないわけですよね。ソースが・・・。

objUserName.FullName の部分が間違っているのですよね??

では、
objUserName.FullName  を正しく定義しなおせばよいのですよね?

どういう方法がありますでしょうか??

私は、
テキストエディタで入力して、
拡張子をvbsに変えて、
実行しているだけの環境です。

宜しくお願いします。


岡田 之仁  2005-06-03 21:36:16  No: 122210

以前のカキコミしていたものですが・・・

For each U in User
  If U.Class = "User" Then
    Set objUserName = GetObject("WinNT://ドメイン名" & U.Name)
    objExcel.Cells(i,1).Value = objUserName.name          
    objExcel.Cells(i,2).Value = objUserName.FullName  
    objExcel.Cells(i,3).Value = objUserName.Description   
    objExcel.Cells(i,4).Value = objUserName.AccountDisabled   
    objExcel.Cells(i,5).Value = objUserName.IsAccountLocked  
    objExcel.Cells(i,6).Value = objUserName.PasswordExpired      
    objExcel.Cells(i,7).Value = objUserName.PasswordExpiranationDate  
  End If
    i = i + 1
Next

この部分で、If U.Class = "User" Then としているのに、再度、
    Set objUserName = GetObject("WinNT://ドメイン名" & U.Name)
これを実行して、Userクラス情報でフィルターした内容が失われている
のが原因と思います。

今、確認する環境が無いのですが、
    Set objUserName = GetObject("WinNT://ドメイン名" & "/" & U.Name & ",User")
として、実行してみて下さい。

それでもエラーするようでしたら、さて何でしょうかネ・・・

以上。


SK  2005-06-03 22:19:30  No: 122211

回答をありがとうございます。

Set objUserName = GetObject("WinNT://ドメイン名" & "/" & U.Name & ",User")

このように変更してみましたところ、出来ました。

ただ、
PasswordExpiranationDate
こちらは、同じエラーで駄目でした。
しかし、これはパスワードなので、Securityの問題で
取得できないという可能性でしょうか?
(あきらめた方が無難でしょうか。)

また、
LastLogin
こちらも確かめてみましたが、
参考にしたスレッドと同じ、「キャッシュが見つからない」エラーでした。

諦めたくは無いのですが、初心者ですし、ここまで出来たら十分かなと、
考えております。

最後に、
ドメインコントローラにアクセスして、それぞれのユーザ情報を開くと、
属しているグループ情報が見れるのですが、
その情報を同じように取得することは・・・
出来ますでしょうか??

もし出来るなら、参考ページや方法を教えて頂けるとありがたいです。

分かる方がいましたら回答をお願いします。


岡田 之仁  2005-06-08 01:44:50  No: 122212

お返事が遅くなりましたが・・・

まず・・・
ユーザーは次回ログオン時にパスワード変更が必要
のフラグを取得するには

iPassExpired = objUserName.GET("PasswordExpired")

で、『0』『1』で取得されます。
設定は、

objUsername.PUT "PasswordExpired", iPassExpired

です。

PasswordExpiranationDate ではなく、objUserName.AccountExpiredDate
ですネ!

LastLogin は、ドメインコントローラに一度もログインしていないと
エラーを返すとか、情報が得られない・・・と記述がありました。

参考
ADSIスクリプトによる
Windows2000システム管理
ピアソン・エデュケーション  ISBN4-89471-288-1  \5800

ADSI ASPプログラミング
翔泳社  ISBN4-88135-756-5  \ 3200

あと・・・
http://www2.noritz.co.jp/anchor/ashp/netmon/wmi_samples.html

ご参考までに・・・

以上。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加