• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WMIを利用。)

パスワードが無期限じゃないユーザーを一括で無期限に!エラー:テーブルが存在しません。

このQ&Aのポイント
  • WindowsのWSHのWMIを利用して、パスワードが無期限ではないユーザーを無期限にする方法について質問です。
  • エラー:テーブルが存在しませんと出てしまう場合、どのように対処すれば良いのでしょうか?
  • サンプルプログラムをVBSファイルにして実行した際、エラー:テーブルが存在しませんというエラーが発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • junkUser
  • ベストアンサー率56% (218/384)
回答No.5

こちらで実行したスクリプト全体を再掲します。 Windows Server 2003 R2 SP2 (DC単独) Windows XP SP2 (ドメインに参加してAdministratorで実行) Windows 2000 Server SP4 (DC単独) で動作することを確認しました。 --- Option Explicit Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000 Dim WshShell Dim strEnvDnsDomain, arrItem, baseDN, i Dim szDomain, szOU, szDN, intUAC, objUser Dim objConnection, objCommand, objRecordSet Dim strCommandText szOU = "OU=Students" Set WshShell = CreateObject("WScript.Shell") strEnvDnsDomain = WshShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%") If Left(strEnvDnsDomain, 1) = "%" Then WScript.Echo "操作しているPCはActive Directoryドメインに参加していないようです。" & vbNewLine & "終了します。" WScript.Quit End If arrItem = Split(strEnvDnsDomain, ".") baseDN = "" For i = 0 to UBound(arrItem) If i = 0 Then baseDN = "DC=" & arrItem(i) Else baseDN = baseDN & ",DC=" & arrItem(i) End If Next szDomain = baseDN Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" objCommand.ActiveConnection = objConnection strCommandText = "<LDAP://" & szOU & "," & szDomain & ">;" & _ "(&(objectCategory=person)(objectClass=user)" & _ "(!userAccountControl:1.2.840.113556.1.4.803:=65536));" & _ "userAccountControl,sAMAccountName,distinguishedName;" & _ "subtree" objCommand.CommandText = strCommandText Set objRecordSet = objCommand.Execute Do Until objRecordset.EOF szDN = objRecordset.Fields("distinguishedName") intUAC = objRecordset.Fields("userAccountControl") Set objUser = GetObject("LDAP://" & szDN ) objUser.Put "userAccountControl", intUAC XOR ADS_UF_DONT_EXPIRE_PASSWD objUser.SetInfo WScript.Echo szDN objRecordset.MoveNext Loop objConnection.Close Set objCommand = Nothing WScript.Echo "END" ---

ken-yoshi
質問者

補足

回答ありがとうございます。 上記スクリプトは知らせてみたのですが 走りませんでした。 テーブルは存在しません。と出てしまいます。

その他の回答 (6)

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.7

え~と・・・ ドメインコントローラ上で実行しているんですよね。 Active Directoryの構成に問題があるのではないかと思われます。 確認1. サポートツールをインストールして、 dcdiag /e を実行してみてください。 エラーがなければOKです。 確認2. ADSI Editが起動できるか確認してみてください。 起動できた場合は、Domain NC の項目を開き、DCのパスを確認してみてください。 これは szDomain と同一ですか?

ken-yoshi
質問者

お礼

junkUserさん回答たびたびありがとうございました。 とりあえずこちら側でもわかってきたことが、 ・スクリプト文は走るが、(たぶんですが) ・こちらの環境のActiveDirectoryでは走らない。 もうひとつ、 ・ADを利用しないでスタンドアロン環境で走らないか? ということです。 もう一度問題点を明確にして質問箱を立てようと思います。 回答ありがとうございました。

ken-yoshi
質問者

補足

回答ありがとうございます。 ***Error: hades is not a DC. Must specify /s:<Domain Controller> or /n:<Naming Context> or nothing to use the local machine. dcdiag /e を実行したところ以上のようなERRORがでました。

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.6

ANo.5 の補足です。 もし実行できなかったら以下のスクリプトが正常に動作するか確認してみてください。 普通であればノータイムで結果が得られます。 --- Option Explicit Dim szDomain, szOU Dim objContainer Dim strInfo szDomain = "dc=annou,dc=com" szOU = "OU=Students" strInfo = "" On Error Resume Next Set objContainer = GetObject("LDAP://" & szDomain ) If Err.Number <> 0 Then strInfo = "szDomain: " & vbTab & "接続できません" Else objContainer.GetInfo strInfo = "szDomain: " & objContainer.ADsPath & vbTab & "正常" End If On Error Goto 0 Set objContainer = Nothing On Error Resume Next Set objContainer = GetObject("LDAP://" & szOU & "," & szDomain ) If Err.Number <> 0 Then strInfo = strInfo & vbNewLine & "szOU: " & vbTab & "接続できません" Else objContainer.GetInfo strInfo = strInfo & vbNewLine & "szOU: " & objContainer.ADsPath & vbTab & "正常" End If On Error Goto 0 Set objContainer = Nothing WScript.Echo strInfo ---

ken-yoshi
質問者

補足

回答ありがとうございます。 こちらのスクリプトを走らせて見ると"接続できません"とポップアップがあがってきます。

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.4

こちらです。 https://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/aug05/hey0825.mspx 確認していませんでしたが、Windows Server 2003ですよね?

ken-yoshi
質問者

補足

回答ありがとうございます。 サーバーはWin2000Serverです。 やはりまだ走らないようです。 ところでこのプログラムはXPでは走らないのでしょうか? (XPでも走るか試しています) 先ほどのスクリプトで、出た値でも走らせて見ましたが、 走りませんでした。

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.3

すみません。無意識に修正していました。 --- Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 20000 --- ↓ --- Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" objCommand.ActiveConnection = objConnection --- このコードはマイクロソフト公式のコードなので間違いないはずです。

ken-yoshi
質問者

補足

回答ありがとうございます。 まだ、走ってくれないようです。 もしよければマイクロソフト公式のコードのほうのアドレスを教えていただけないでしょうか?

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.2

即席で szDomain に設定すべき値を調べるスクリプトを作りました。 お試しください。 --- Option Explicit Dim WshShell Dim strEnvDnsDomain, arrItem, baseDN Dim i, frag Set WshShell = CreateObject("WScript.Shell") strEnvDnsDomain = WshShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%") frag = 0 If Left(strEnvDnsDomain, 1) = "%" Then frag = 1 strEnvDnsDomain = WshShell.ExpandEnvironmentStrings("%USERDOMAIN%") End If arrItem = Split(strEnvDnsDomain, ".") baseDN = "" For i = 0 to UBound(arrItem) If i = 0 Then baseDN = "DC=" & arrItem(i) Else baseDN = baseDN & ",DC=" & arrItem(i) End If Next If frag > 0 Then baseDN = "Warning: このPCはActive Directoryドメインに参加していないかもしれません" _ & vbNewLine & baseDN End If WScript.Echo baseDN ---

ken-yoshi
質問者

補足

返答ありがとうございます。 とりあえず "DC=***,DC=***,DC=***" と三つ出たので szDomain = "dc=***,dc=***,dc=***" と新たに書き込みましたがやはりエラーが出たままです。

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.1

こちらでも実行してみました。 コード自体は間違っていませんでした。 szDomain = "dc=annou,dc=com" が間違っていると「テーブルが存在しません」のエラーが出ました。

ken-yoshi
質問者

補足

うーん、やはり実行してみても正しく走りません。 設定か何かが違うのでしょうか?

関連するQ&A