WIN2000ドメイン環境で
ADSIを使用してユーザのパスワードを取得する
方法はあるのでしょうか?IADsUserなんかを使うのだと思うのですが・・・。
パスワードを取得し、それを変更をしたいと考えています。
ちなみにユーザ一覧は取得することはできました。

ご存知の方いらっしゃいましたらご教授願えませんでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ADSIをはじめて使用したので、レスが遅くなってます。


>SetPassword
そうですね。基本的に新規ユーザの登録ですが、おっしゃる通り操作する人の権限次第では強制的にパスワードをセットできるようです。
そしてユーザの強制削除もできるようです。

参考文献はMSDNです。会社で試したかったけど、サーバのユーザ情報を勝手に触るわけにはいかないので、現在自宅で実験中です。
一度、適当なパスワードに強制的にパスワードを変更したために、ログインできずに困っちゃいました(笑)

ADSIなんてこんな便利なものがあるなんて知りませんでした。
感謝です。
    • good
    • 0
この回答へのお礼

なんとか、できました。
これだけみると、すごい簡単ですね。
Dim objUser As IADsUser

Set objUser = GetObject("LDAP://" & "CN="TESTUSER," & "CN=Users," & "DC=dom," & "DC=co," & "DC=jp")

objUser.SetPassword("password")
objUser.SetInfo

てな具合です。 ありがとうございました。

お礼日時:2001/11/13 23:01

調査しました。




ところで、パスワードの変更部分はできてるのですよね?
一応念のため
Sub Main()
  Call PasswordChanger("DOMAIN_NAME", "MACHIN_NAME", "TAGOSAKU7", "123456789", "987654321")
End Sub

Public Sub PasswordChanger(inDomainName As String, inServerName As String, inUserName As String, inOldPass As String, InNewPass As String)
  Dim objDomain  As IADsContainer
  Dim objUser   As IADsUser
  
  Set objDomain = GetObject("WinNT://" & inDomainName & "/" & inServerName)
  Set objUser = objDomain.GetObject("User", inUserName)
  
  objUser.ChangePassword inOldPass, InNewPass

PGMEND:
  Set objUser = Nothing
  Set objDomain = Nothing
End Sub



それで本題のパスワードの取得ですが・・・
IADsUser構造体に無いですよね。
それで以下の関数を作成してみました。

Private Const NERR_Success = 0

Private Declare Function NetUserGetInfo Lib "netapi32.dll" (ByVal strServer As String, ByVal strUserName As String, ByVal bufptr As Long, lpBuffer As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function lstrlenW Lib "kernel32" (ByVal Ptr As Long) As Long
Private Declare Sub lstrcpyW Lib "kernel32" (lpszString1 As Any, lpszString2 As Long)

Sub Main()
  Debug.Print getPassword("MACHIN_NAME", "TAGOSAKU7")
End Sub

Function getPassword(inServerName As String, inUserID As String) As String
  Dim buf3  As USER_INFO_3
  Dim lngBuf As Long
  Dim lngSts As Long

  'ユーザ情報の取得
  lngSts = NetUserGetInfo(StrConv(inServerName, vbUnicode), StrConv(inUserID, vbUnicode), 3, lngBuf)
  If NERR_Success <> lngSts Then
    MsgBox "情報取得失敗"
    GoTo PGMEND
  End If

  'ポインタを構造体へコピー
  Call CopyMemory(ByVal VarPtr(buf3), ByVal lngBuf, Len(buf3))
  getPassword = PointerToString(buf3.Password)

PGMEND:
End Function

'ポインタから文字列を取得
Public Function PointerToString(ByRef inIn As Long) As String
  Dim wkLen    As Long
  Dim bytBuffer() As Byte

  '文字列の長さを得る
  wkLen = lstrlenW(inIn) * 2
  If wkLen > 0 Then
    ReDim p_abytBuffer(0 To (wkLen - 1)) As Byte
    Call lstrcpyW(p_abytBuffer(0), ByVal inIn)
    PointerToString = p_abytBuffer
  End If

End Function


するとパスワードが取得できませんでした。
なぜかなと思ったら、セキュリティ上の問題でUSER_INFO_3.PasswordにはNullポインタが返されるようです。これはMSDNに書いてありました。でADSIですが、内部でこれらのAPI関数を使用しているだけのライブラリだと思うので、ADSIでもパスワードの取得は無理だと思います。

以上が調査結果です。

この回答への補足

ちょっと今は試せる環境がないのですが、もしかすると既存ユーザのパスワード変更はChangePasswordではなく
SetPasswordなんかでいいのでしょうか?
SetPasswordは新規ユーザのときだと思っていたのですが・・・??

補足日時:2001/11/13 00:33
    • good
    • 0
この回答へのお礼

TAGOSAKU7さん、かなりきちんと調査などしていただき、とても感激です。ADSIではやはりできないみたいですね。
それと・・・すみません。
ユーザのパスワードを変更するには、現在のパスワードを取得して、新規パスワードで登録しなければならないと思っていたのですが、管理者権限があるユーザなら(正式にはよくわからないですが)現在のパスワードがわからなくても、強引に新しいパスワードに変更してしまうことができるようですね。
最終的にやりたいことはユーザの一括変更・削除なのです。(これについては先に言っていればよかったですね。大変ご迷惑をおかけしました。)

お礼日時:2001/11/13 00:33

NetUserChangePassword


のサンプルがありました

参考URL:http://www.vbvbvb.com/jp/gtips/0251/gNetUserChan …

この回答への補足

すみません。
ADSIを使って実現したいのです。
既存ユーザを取得し、(例えば一人のユーザ)
そのパスワードを変更する。
というようにです。

補足日時:2001/11/12 16:26
    • good
    • 0

NetUserGetInfo


http://www.microsoft.com/JAPAN/developer/library …

NetUserChangePassword
http://www.microsoft.com/JAPAN/developer/library …

ここら辺が参考にならないですか?

今はテスト環境が無いので、サンプルは作成できません。

この回答への補足

すみません。
VB6とADSIを使って実現したいのです。
それと補足ですが、
パスワードの取得というより(無理そうなので)
既存ユーザのパスワード変更で結構でした。

補足日時:2001/11/12 16:25
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWindows7 パスワードリセット

今まで使っていた管理者アカウントのPWを忘れて
guestアカウントしかない状態です

なんとかパスワードを解除しようと

[Offline NT Password & Registry Editor]

このソフトを試したのですが

ERROR : Failed to copy registry file sam

とでてstep3に進むことができません。

どうすれば進むことができるでしょうか・・・


よろしくお願いします。

Aベストアンサー

linuxコマンド chntpw 使用の下記サイトを試してみてください。
Windows/System32/config フォルダの場所を正しく指定すればリセットできます。

chntpw
http://ftlabo.sakura.ne.jp/win/chntpw/chntpw.html

QVBAでActiveDirectoryのユーザ一覧の取得の仕方

Excel VBAにてActiveDirectoryのユーザなどの管理をしたいと考えています。
(理由:操作ミスなどを防ぐために、AD操作は全てExcelからにしたい)

情報を取得する対象のユーザが分かっていれば、以下の方法で、情報を取得可能かと思います。
(実行するユーザが、ADの操作権限がある前提で、suzukiというユーザの情報を取得する場合)
Dim objSysInfo
Dim objUser
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://CN=suzuki,OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com")
 AD:ad.test.com
 OU:OU123→OU123_ユーザー

OU123_ユーザー配下のすべてのユーザ情報を取得する場合には、どのようにすればよろしいでしょうか?

Aベストアンサー

質問文に書いてある単一ユーザーを取得する書き方に沿えばこんな感じかなぁ。
Dim objOU, objUser
Set ObjOU = CreateObject("LDAP://OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com")
objOU.Filter = Array("user")
For Each objUser In objOU
 Debug.Print objUser.Name
Next

複数のアカウントを取得するので ADODB で DB のように取り扱うこともできそう。(ちょっと長いけど)
Dim objConn, objComm, objRst
Set objConn = CreateObject("ADODB.Connection")
Set objComm = CreateObject("ADODB.Command")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objComm.ActiveConnection = objConn

objComm.Properties("Page Size") = 1000 ' 検索結果の最大取得数
objComm.Properties("Searchscope") = 1 ' この OU の配下も全部なら 2 を指定
objComm.CommandText = "SELECT Name From 'LDAP://OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com' WHERE objectCategory='user'"
Set objRst = objComm.Execute

objRst.MoveFirst
Do Until objRst.EOF
 Debug.Print objRst.Fields("Name").Value
 objRst.MoveNext
Loop


私は今まで Excel でアカウントの台帳を作っていたので、これを元に Active Directory を操作できないかと考えていたのですが、最近になって考え方を改めました。
台帳はあくまでも Active Directory なので、ユーザーのリストがほしければ都度取得すればいいじゃないか、と。
アカウント登録や変更も、[対象アカウントの存在確認] → [更新] をすりゃいいじゃないか、と。
それで Excel 台帳による二重管理を捨て、PowerShell によるいくつかのスクリプト ファイルを作っているところです。
一覧を取得するだけなら以下の 1行でできちゃいますし。
Get-ADUser -Filter * -SearchBase "OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com" -Properties * -SearchScope OneLevel | ForEach-Object { $_.Name}

質問文に書いてある単一ユーザーを取得する書き方に沿えばこんな感じかなぁ。
Dim objOU, objUser
Set ObjOU = CreateObject("LDAP://OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com")
objOU.Filter = Array("user")
For Each objUser In objOU
 Debug.Print objUser.Name
Next

複数のアカウントを取得するので ADODB で DB のように取り扱うこともできそう。(ちょっと長いけど)
Dim objConn, objComm, objRst
Set objConn = CreateObject("ADODB.Connection")
Set objComm = CreateObject("ADODB.Command")
...続きを読む

Q忘れたwindows 7 パスワードを解除したい

何度も試しても、windows 7にログインできません。パスワードをどうしても思い出せません。困ります。忘れたwindows 7 パスワードを解除して、入力しないで起動するようにしたいのですが、どうすればいいのかがぜんぜん分かりません。誰か教えてくれませんか。よろしくお願いいたします。

Aベストアンサー

windows 7のコントロールパネルのユーザーアカウントから直接にwindows 7 パスワードのログオンを閉じることが出来ます。しかし、現在利用されているパスワードが分からない場合、設定できません。まず、忘れたwindows 7 パスワードを解除しなければなりません。
システムのリカバリーは一つの対策です。もし、システムをリカバリーすれば、解除できますが、一般的には薦められていません。Cに保存されているすべてのデータは削除されます。せめて、バックアップした後、以上の操作を行ってください。しかし、ログインできない場合、バックアップも実行できません。
今、ますます多くの方はパスワードリセットツールで解除操作を実行します。また、PCの修理店に問い合わせて、業者に依頼する方も多いようです。

参考URL:http://jp.magic-rescue-cd.com/windows7-password.html

QADSIの取得方法について

すみませんが、すべてのOUとGGの取得の仕方を教えて頂けませんか
よろしくお願いします。

Aベストアンサー

>ADSIの取得方法について

なんか日本語間違ってるような・・・

OUはこれを参考にすればいいのでは?
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/columns/profwin/pw0802.asp

GGは探しても出てこないですね。
違うかもしれませんが、
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/prodtechnol/windows2000serv/reskit/deploy/part7/append-d.asp

Clone-gg.vbsというVBScriptがWin2000のCD-ROMに含まれているらしいです。

Qwindows7パスワード解除

何度も試しても、だめです。このwindows7パスワードを忘れてしまうはずがないのに、どうしても思い出せないのです。皆さんもこんな状況に遭遇したことがありますか。どうすればよいのでしょうか。システムを再インストールした後、このwindows7パスワード解除できると聞きますが、そうしたら、すべてのアプリケーションも再インストールする必要があるでしょう。面倒だと思います。ほかのもっと簡単なパスワード解除対策はありませんか。どなたか教えてくれませんか。よろしくお願いします。

Aベストアンサー

後ろの疑問符で表示されるヒントを見て、試したことがありますか?
確かに、システムの再インストールを実行したら、ほぼすべてのインストールされていたアプリも再インストールする必要があります。また、再インストールしたら、Cをフォーマットする必要もありますよ。中に保存されているデータも消えてしまいます。この対処法はベストチョイスではないと思います。
もし、修理店も依頼したくない場合、自分でwindows7パスワード解除に対応するツールを使って見てもよろしいです。会社の同僚もこんな問題に遭遇したことがあります。ツールで問題を解決したようです。使用したツールはMagic PassNowというものです。公式サイトから、チュートリアルもあります。このパスワード解除機能は無料で利用できるようです。よろしければ、試してみてください。下記のページは関連サイトです。参考してみてください。

参考URL:http://jp.magic-rescue-cd.com/recover-windows7-password.html

Q他のユーザのログインパスワード取得/変更について

いつもお世話になっております。
今回ご質問させていただく内容は、[他のユーザのログインパスワード取得/変更]について実現可能かご教授いただきたいと思います。
実現可能な場合、参考HPや使用するWin32API等ご教授いただけたら幸いです。
※実際に作成できても絶対に悪用しない事を誓います。
 また、この質問に回答下さった方を裏切らない為に閲覧した方も悪用しないで頂きたいと思います。
環境:VB6.0 WindowsXP Professional
【 実現方法(手順) 】
(1):ログインするユーザ名:tarou パスワード:hanako
(2):パスワード取得/変更を変更したいユーザ名:ichirou パスワード:jirou
(3):(1)(2)共に管理者権限を保有しています。
(4):ユーザ名:tarouでWindowsXP Professionalへログインします。
(5):VB6.0で作成したプログラムを実行し、ユーザ名:ichirouの現在設定されているパスワードを取得します。
(6):ユーザ名:ichirouのパスワードを変更(saburou)し新たに設定します。
上記のようなパスワード取得/変更がセキュリティーの厳しいWindowsXP Professionalに対し、VB6.0で実現可能かご教授願います。
また、VB以外での実装方法を知っている方が居ましたら合わせてご教授願います。
宜しくお願い致します。

いつもお世話になっております。
今回ご質問させていただく内容は、[他のユーザのログインパスワード取得/変更]について実現可能かご教授いただきたいと思います。
実現可能な場合、参考HPや使用するWin32API等ご教授いただけたら幸いです。
※実際に作成できても絶対に悪用しない事を誓います。
 また、この質問に回答下さった方を裏切らない為に閲覧した方も悪用しないで頂きたいと思います。
環境:VB6.0 WindowsXP Professional
【 実現方法(手順) 】
(1):ログインするユーザ名:tarou パス...続きを読む

Aベストアンサー

> Set objUser = GetObject("WinNT://./kenmyer")
> objUser.SetPassword("i5A2sj*!")
上記のコードをWindows XP Proで試してみましたが、指定されたパスワードに変更されたように見えますが・・・

> 実行してみましたが、どうしても上手く動作しませんでした。
どういう風に「上手く動作しません」 のでしょうか?
#エラー発生?変更したパスワードでログインできない?ログイン後ファイルが見えない?

> このコマンドはwindowsNTでのコマンドみたいですので

あれ? 「WindowsNT以降で採用されたログイン管理方式」に対するコマンドなのでは?

#XPも同じ管理方式を利用しているので、使用できるのだと思ったんですが・・・

Qパスワードの入力なしにWindows 7を起動する

Windows 7の起動中にユーザー名が表示されその下の窓にパスワードを入力するように求められます。
毎回のことで面倒くさいのでこのパスワードを入力しないで起動するようにしたいのですが、どうしたらいいのでしょうか。

Aベストアンサー

こちらを参考に・・

http://www.pasoble.jp/windows/7/08828.html

QADSIについて

現在ADSIを利用してクライアントからActiveDirectoryのドメインユーザパスワードをリセットするツールを作成しています。

LDAPで接続はするのですが、どうしてもSetPasswordにてエラーが発生してしまいます。
ChangePasswordでは処理が通るのですが、元パスワードがわからない状況を考えるとSetPasswordで行う必要があります。

対処法など知ってる人がいれば御教え願えないでしょうか。

ちなみに、WindowsXPの環境では同じもので問題なく動作します。
上記のことから、環境によって影響を受けているのではないかと推測しているのですが、切り分けができません。

どうか、よろしく御願いいたします。

環境
サーバwindows server2003
クライアントwindows 2000SP4

エラー
-2147023570 オートメーション エラーです。
ユーザー名を認識できないか、またはパスワードが間違っています。

Aベストアンサー

>一応、質問に記入しているのですが、わかりにくかったようで申し訳ありません。
業務中のこっそり見なので、完全に読み飛ばしをした、私のミスです。
本当に、すいません。


あらためて、情報願います。

>XP環境では問題なく
XPでも2000でも、同じドメインユーザを利用ですか?

異なるのであれば、両環境のユーザは、ドメイン環境で同じ権限を持ってますよね?

QWindows 7のパスワードをわすれてしまった!

Windows 7の最初のきめたパスワード(決めたパスワードをメモしてたので。)
で、パスワード変更をしようとしても、パスワードかユーザー名が間違ってるとでます。
ユーザー名はあってるとおもうので、パスワードがちがうとおもわれます。
最初にきめたのがかわることはありますか?
また、こういうときはどうすればいいのですか!?
おしえてください!
おねがいします!

Aベストアンサー

できることならパスワードを設定しないのが一番ですがね。

Qユーザの所属するグループを取得する

現在ログオン中のユーザが所属するグループ名を取得することは可能でしょうか。
開発環境はVB.NETでOSはXPです。

ユーザ名はSystem.Environment.UserNameで取れることが分かったのですが、
そのユーザが属するグループが取れるのか分かりません。

ご存知の方、よろしくお願いいたします。

Aベストアンサー

#1 です。失礼しました・・・
コレなんかはどうでしょうか?
C# のコードみたいですけど。

参考URL:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17653&forum=7&1


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング