[ADSI] スキーマキャッシュのトラブルシュート -前編

ご無沙汰しております。ぴろとでございます。最近、お客様対応にて時間がなかなか作れない状況で記事を書くことができませんでした。今回は、ADSI を使用した場合のスキーマキャッシュに関するトラブルシュートをご紹介いたします。

- 事故発生! 8000500C エラーとなり、スクリプトが動かない!

A さんは、いつもと同じ朝を向かえ、ご機嫌で会社に出社しました。そしてお気に入りの ADSI のスクリプトを実行しようとしましたが、管理用サーバーの電源が入っていませんでした。もちろん、お気に入りのスクリプトのバックアップを持っていたので、そのスクリプトを Hyper-V でホストしているワークグループ環境にて実行しました。すると、いつもは快適に動作するスクリプトがなぜか、0x8000500C でエラーになってしまいます。「おかしいなぁ、いつもは快適に動作するはずなのに…」と A さんはつぶやき、再起動を試みましたがうまくいきません。

image  図 1 : 0x8000500c に驚き、苦悩する A さん (仮名 : 30 歳)

この環境で、スクリプトが動作するようにトラブルシュートしよう!

意気揚々と、トラブルシュートを行う決心をした A さんでした。

image 図 2 : トラブルシュートへの決意をみなぎらせる A さん

 

- いざ、トラブルシュートへ!

A さんは、トラブルシュートを行うにあたり次の項目を確認しはじめました

1) 環境の確認
クライアント : ワークグループ環境の Windows Server 2003 SP2
サーバー : Windows Server 2003 Active Directory

2) 使っているスクリプト

スクリプトは、パスワードの有効期限の設定を読み取るためのものです。

        Const ONE_HUNDRED_NANOSECOND = 0.0000001 ' .000000100 は 10^-7 と等価です

        Const SECONDS_IN_DAY = 86400

        objDomain = GetObject("LDAP://contoso-dc/DC=contoso,DC=com")

        objMaxPwdAge = objDomain.Get("maxPwdAge")

        If objMaxPwdAge.LowPart = 0 Then

            WScript.Echo("パスワードの最長有効期間がドメイン内で 0 に設定されています。" & _

                         "したがって、パスワードに有効期限は設定されていません。")

            WScript.Quit()

        Else

            dblMaxPwdNano = Abs(objMaxPwdAge.HighPart * 2 ^ 32 + objMaxPwdAge.LowPart)

            dblMaxPwdSecs = dblMaxPwdNano * ONE_HUNDRED_NANOSECOND

            dblMaxPwdDays = Int(dblMaxPwdSecs / SECONDS_IN_DAY)

            WScript.Echo("パスワードの最長有効期間は " & dblMaxPwdDays & " 日です。")

        End If

(続く…)

P.S. ぜひ、今後の展開を予想してください。後半で実際にトラブルシュートします。

~ ぴろと ~

※ 画像とフォント整形など勝手に協力 : ういこう。画像は Office のクリップアートです…