C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ActiveDirectoryのパスワード設定でエラー

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■103526 / inTopicNo.1)  ActiveDirectoryのパスワード設定でエラー
  
□投稿者/ まさる (1回)-(2025/02/04(Tue) 15:27:20)

分類:[VB.NET/VB2005 以降] 

ローカルPCからサーバーのActiveDirectoryに対してユーザーの追加、およびパスワード設定を行うコンソールアプリケーションを作成しています。
ADを扱う事が初めてですが手探り状態ながらユーザーの追加はできましたがパスワード設定の箇所でエラーが発生し原因が判らず停滞しております。
何かしらのご助言、ご指摘がございましたらよろしくお願い致します。
   
開発環境:VisualStudio2022
言語:VB
サーバー:WinServer2022

Dim path as string ="LDAP://domainname/DC=ryu-test,DC=com";
Dim adminUser As String = "CN=administrator,CN=users,DC=ryu-test,DC=com"
Dim adminPwd As String = "1234567890"

' Admin権限者でAD接続
Dim drEntry As New DirectoryEntry(path, adminUser, adminPwd, AuthenticationTypes.FastBind)

' ユーザを追加
Dim user As DirectoryEntry = drEntry.Children.Add("CN=addUser,OU=Group", "user")
user.CommitChanges()

'パスワード設定
Dim password As Object() = {"newpassword"}
user.Invoke("SetPassword", password)

--------------------------------------------------
例外がスローされました: 'System.Reflection.TargetInvocationException' (System.DirectoryServices.dll の中)
System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.Runtime.InteropServices.COMException: 1 個以上の入力パラメーターが無効です

--- 内部例外スタック トレースの終わり ---
場所 System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args)
--------------------------------------------------



引用返信 編集キー/
■103527 / inTopicNo.2)  Re[1]: ActiveDirectoryのパスワード設定でエラー
□投稿者/ とくま (23回)-(2025/02/06(Thu) 09:56:50)
No103526 (まさる さん) に返信
レスついていないようなので、業務として実績の無いレベルの開発者からの案です。

・セキュリティが関連するようなプログラムの実行は、ネットワーク越しの実行は後回しにして
まず、サーバー上でテストしてみるべきではないでしょうか?場合によっては、ネットワークから
切断したテストサーバを別に立てて、セキュリティソフトとかも落としてテストとかも考えます。
・ActiveDirectoryの操作については、コマンドプロンプトから直接操作するコマンドがあります。
まずはそちらを利用して、ユーザーやロールの設定や指定などでエラーが出ていないか確認しては?
コマンドによってはPowerShellコマンドを使用したほうが情報が取れる場合があるかもしれません。
単純なOUの指定ミスとか、パスワードの条件(12文字以上必要とか?)があるなら、それを満たして
いないとかなら、こちらの方がもっと直接的なエラーメッセージが返ってくるかも。
・操作コマンドとして管理者権限を指定していても、それ以前に、実行ファイル(EXE)が管理者権限で
実行されていない場合、システムへの変更などは全て拒否される場合があります。そういう観点から
調査してみるとか?
https://learn.microsoft.com/ja-jp/troubleshoot/developer/visualstudio/csharp/language-compilers/add-user-local-system
ざっと見た感じ処理の流れは合ってるっぽいので、エラーメッセージを信じるならコマンドの内容に
問題がありそうだけど、ふわっとしたエラーメッセージなので、直接のエラー原因でなく、二次的な
メッセージかもしれません。色々と条件変えてエラーメッセージが変わるかの調査から始めますね、私なら。

引用返信 編集キー/
■103528 / inTopicNo.3)  Re[2]: ActiveDirectoryのパスワード設定でエラー
□投稿者/ まさる (2回)-(2025/02/06(Thu) 12:18:43)
2025/02/06(Thu) 13:09:53 編集(投稿者)

No103527 (とくま さん) に返信

ご返信ありがとうございます。
ご提案頂いた内容を参考にアプローチしてみたいと思います。
解決済み
引用返信 編集キー/
■103529 / inTopicNo.4)  Re[2]: ActiveDirectoryのパスワード設定でエラー
□投稿者/ とくま (24回)-(2025/02/07(Fri) 09:47:42)
No103527 (とくま さん) に返信
というか改めて考えると、最小パスワード期間が1日で変更を拒否されてる(?)とかも含めて
普通に変更できない設定になってないかとか、グループポリシーの画面見たり、実際の
Active Directoryの管理画面でその操作が正しく終了できるか確認する方が先か。
https://www.windows-active-directory.com/ja/active-directory%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC.html
https://learn.microsoft.com/ja-jp/windows-server/identity/ad-ds/get-started/adac/fine-grained-password-policies?tabs=powershell

解決済み
引用返信 編集キー/
■103542 / inTopicNo.5)  Re[3]: ActiveDirectoryのパスワード設定でエラー
□投稿者/ まさる (3回)-(2025/02/13(Thu) 14:18:39)
No103529 (とくま さん) に返信
ご返信ありがとうございます。
グループポリシーの画面では最小パスワード期間は0日とか複雑さを満たすなどは無効にしましたが状況変わらず。
「Active Directory ユーザーとコンピューター」の画面ではユーザーの追加やパスワードの変更などは問題無く出来ました。

パスワード無しで登録後にDirectorySearcherで検索して
userEntry.Invoke("ChangePassword", "", New Object() {"", 新しいパスワード})など試してみましたが同じエラーでした。
解決済み
引用返信 編集キー/
■103544 / inTopicNo.6)  Re[4]: ActiveDirectoryのパスワード設定でエラー
□投稿者/ とくま (25回)-(2025/02/14(Fri) 17:00:18)
No103542 (まさる さん) に返信
解決していないなら「解決済み」チェックは外した方が良いかと思います。

DirectoryEntry を使ってサーバにコマンドを投げても良いテスト環境が手元に無いため、
サーバ上でちまちまコマンドを投げる切り口しか提案できなくて申し訳ない
登録はできて変更ができないということで、あくまでコマンドに指定している
引数に問題がある前提の調査です。まずは指定しているOU等、登録する場所を変えてみてください。

サーバ上でコマンドプロンプト(cmd)を『管理者として実行』して
dsadd user "CN=testuser1,CN=addUser,OU=Group,DC=ryu-test,DC=com" -display testuser1 -pwd password
dsmod user "CN=testuser1,CN=addUser,OU=Group,DC=ryu-test,DC=com" -pwd newpassword
としたときに何かエラーメッセージが表示されますか?

また、上記コマンドをOU等を利用せず、デフォルトのUsersフォルダに
"CN=testuser2,CN=Users,DC=ryu-test,DC=com"
ユーザを新規登録した場合の結果に違いはありますか?

同様に、DirectoryEntry にて、administratorと同じ場所に作成したユーザでも同じ現象が起きますか?
引用返信 編集キー/
■103560 / inTopicNo.7)  Re[4]: ActiveDirectoryのパスワード設定でエラー
□投稿者/ とくま (26回)-(2025/02/18(Tue) 17:00:27)
No103542 (まさる さん) に返信
DirectoryEntry 側からのアプローチも書いておきます。

>パスワード無しで登録後にDirectorySearcherで検索して
>userEntry.Invoke("ChangePassword", "", New Object() {"", 新しいパスワード})など試してみましたが同じエラーでした。
検索して取得できたということでしょうから、やはり登録はできていると。
エラーメッセージは信用しても仕方がないレベルかと思います。
先の回答で「エラーメッセージが変わるか」と書きましたが、Invoke に関してはメッセージは大して変わらないと思います。
動作的に文字列で指定したメソッドを探して、指定した引数を丸投げして成功したかどうかのみ把握する用のものなので
「1 個以上の入力パラメーターが無効です」も当たり前のことを言っているだけのエラーメッセージですね。
例外が COMException だとメッセージに出ていますので、COMException として try〜catch できます。
https://learn.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.comexception?view=net-8.0
調べるのであれば、InnerException や StackTrace にエラーの状況を絞り込めるような情報が出ていないか?まで
調べてみてください。

検索もできたということで、やはりパスワードの設定は何か条件を必要としている可能性も高いので、
先のサンプルコードでもありましたが、
https://learn.microsoft.com/ja-jp/troubleshoot/developer/visualstudio/csharp/language-compilers/add-user-local-system
>NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"});
Description を Put するような、失敗の可能性が少ない他のコマンドを試してみるとか。
これが成功するなら、やはりパスワードの設定のみ何か拒否されていると見るべきかも。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ