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

WMIを利用してWindowsのWSHでパスワードを無期限にする方法

このQ&Aのポイント
  • 現在、WindowsのWSHのWMIを利用して、パスワードが無期限ではないユーザーを無期限にしようと思っています。
  • ソースコードが正しく走るのは確認が取れているが、こちら側の環境で走らないことが問題となっています。
  • 逆にスタンドアロンの環境でもいいので、どのようにして走らせることができるのでしょうか。

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

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

ローカルの全ユーザーのパスワードを無期限にします。 --- Option Explicit Const UF_DONT_EXPIRE_PASSWD = &H10000 Dim WshShell Dim strEnvDomain, strInfo Dim objContainer, adsObject Dim intUserFlags, intNewFlags Set WshShell = CreateObject("WScript.Shell") strEnvDomain = WshShell.ExpandEnvironmentStrings("%USERDOMAIN%") On Error Resume Next Set objContainer = GetObject("WinNT://" & strEnvDomain ) If Err.Number <> 0 Then WScript.Echo "USERDOMAIN: " & vbTab & "接続できません" WScript.Quit End If On Error Goto 0 objContainer.GetInfo For Each adsObject In objContainer If adsObject.Class = "User" Then intUserFlags = adsObject.Get("userFlags") If Not intUserFlags And UF_DONT_EXPIRE_PASSWD Then intNewFlags = intUserFlags Or UF_DONT_EXPIRE_PASSWD adsObject.Put "userFlags", intNewFlags adsObject.SetInfo ' WScript.Echo adsObject.Name End If End If Next WScript.Echo "End" ---

ken-yoshi
質問者

お礼

無事解決しました。 何度も丁寧に回答いただきました。 これでめどが立ちそうです。 ありがとうございました。

ken-yoshi
質問者

補足

返答ありがとうございます。 ↑スクリプトで無事走りました。 何度もすみません。詳細を話さなかったため手間取って申し訳ありませんでした。 本当に何度もありがとうございました。

その他の回答 (1)

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

また来ました。 ipconfig /all でDCのDNSサーバを参照していますか? これが正しくない場合は、LDAPで接続できないので別の方法で接続する必要があります。 このコードはローカルユーザー列挙するスクリプトです。 以下のコードでつながりますか? 最初の30ユーザーを表示するようにしていますが、この中にパスワードを無期限にしたいユーザーは含まれますか? --- Option Explicit Const LIST_LIMIT = 30 Dim WshShell Dim strEnvDomain, strInfo, counter Dim objContainer, adsObject Set WshShell = CreateObject("WScript.Shell") strEnvDomain = WshShell.ExpandEnvironmentStrings("%USERDOMAIN%") On Error Resume Next Set objContainer = GetObject("WinNT://" & strEnvDomain ) If Err.Number <> 0 Then WScript.Echo "USERDOMAIN: " & vbTab & "接続できません" WScript.Quit End If On Error Goto 0 strInfo = "" counter = 0 objContainer.GetInfo For Each adsObject In objContainer If adsObject.Class = "User" Then strInfo = strInfo & vbNewLine & adsObject.Name counter = counter + 1 If counter >= LIST_LIMIT Then Exit For End If Next WScript.Echo strInfo ---

ken-yoshi
質問者

お礼

↑間違いました。ドメインではなくユーザーの追加です。 何度も申し訳ありません。

ken-yoshi
質問者

補足

回答ありがとうございます。 細かなお話をするのを忘れていました。 話をまとめますと サーバーを立てようとしてWIN2000サーバーをインストールしてそのときに WINにドメインを追加するのですが、そのときドメイン数が10~20ぐらいあって初期設定で無期限にチェックが入っていないため、手間がかかるのでWSHのWMIを使いたいということです。 そのため、ActiveDirectoryなどは利用していなく、スタンドアロン環境で、ただ、無期限チェックボックスにチェックをしたいということです。 途中でお話すればよかったのですが、すぐできると思っていたのでお話できませんでした。どうもすみません。 ↑のようにスタンドアロン環境のADに参加しないWin2000サーバーです。 以上よろしくお願いします。

関連するQ&A