ドメイン情報を取得する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でサポートされていないプロパティまたはメソッドです。
というエラーが出てしまっています。
何がいけないのでしょうか。
どうしたらよいのでしょうか?
教えて下さい。
>Objectでサポートされていないプロパティまたはメソッドです。
>というエラーが出てしまっています。
>
>何がいけないのでしょうか。
定義されていないもしくは正しく定義していない
プロパティやメソットを使おうとした為に、コンパイラが
「そんなものねぇ〜!(-_- #)」といっているわけです。
>どうしたらよいのでしょうか?
正しく定義をしなおすか。
存在するプロパティやメソットを使うようにしましょう。
って日本語が読めれば理解できそうな気がするが・・・。
すぐに回答をありがとうございます。
実は、雑誌で、
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に変えて、
実行しているだけの環境です。
宜しくお願いします。
以前のカキコミしていたものですが・・・
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")
として、実行してみて下さい。
それでもエラーするようでしたら、さて何でしょうかネ・・・
以上。
回答をありがとうございます。
Set objUserName = GetObject("WinNT://ドメイン名" & "/" & U.Name & ",User")
このように変更してみましたところ、出来ました。
ただ、
PasswordExpiranationDate
こちらは、同じエラーで駄目でした。
しかし、これはパスワードなので、Securityの問題で
取得できないという可能性でしょうか?
(あきらめた方が無難でしょうか。)
また、
LastLogin
こちらも確かめてみましたが、
参考にしたスレッドと同じ、「キャッシュが見つからない」エラーでした。
諦めたくは無いのですが、初心者ですし、ここまで出来たら十分かなと、
考えております。
最後に、
ドメインコントローラにアクセスして、それぞれのユーザ情報を開くと、
属しているグループ情報が見れるのですが、
その情報を同じように取得することは・・・
出来ますでしょうか??
もし出来るなら、参考ページや方法を教えて頂けるとありがたいです。
分かる方がいましたら回答をお願いします。
お返事が遅くなりましたが・・・
まず・・・
ユーザーは次回ログオン時にパスワード変更が必要
のフラグを取得するには
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
ご参考までに・・・
以上。
ツイート | ![]() |