Windows ユーザー アカウントをプログラムで追加および削除するために、リモート マシンにアクセスする必要があるシナリオがあります。リモート マシンは、メイン ワークステーションを交換する必要がある場合に備えて、リモートで構成する必要がある「予備のワークステーション」です。したがって、ここにはセキュリティ バイパスや悪意のあるソフトウェアはありません :)
リモート マシン管理者のユーザーとパスワードを知っており、WMI Win32_UserAccount を使用して、既存のユーザー アカウントの完全なリストを取得できます。現在、各ユーザーの UserPrincipal オブジェクトを取得しようとしています (最終的に削除するため) が、すべての試行で例外が発生しています。
試み #1:
PrincipalContext context = new PrincipalContext(ContextType.Domain, "xxx.xxx.xxx.xxx" /*remote IP Address*/); UserPrincipal user = (UserPrincipal.FindByIdentity(context, "userName")); // Do something with user, like user.Delete();
この場合、最初の行で常に例外が発生します。
System.DirectoryServices.AccountManagement.PrincipalServerDownException がキャッチされました Message=サーバーに接続できませんでした。
Source=System.DirectoryServices.AccountManagement StackTrace: System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties) 内 System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval() 内 System.DirectoryServices.AccountManagement.PrincipalContext..ctor( ContextType contextType、文字列名、文字列コンテナー、ContextOptions オプション、文字列 userName、文字列パスワード) in System.DirectoryServices.AccountManagement.PrincipalContext..ctor (ContextType contextType、文字列名、文字列コンテナー、文字列 userName、文字列パスワード) InnerException: System.DirectoryServices .Protocols.LdapException Message=LDAP サーバーを利用できません。ソース = System.DirectoryServices.試み #2:
PrincipalContext context = new PrincipalContext(ContextType.Machine, "xxx.xxx.xxx.xxx" /*remote IP Address*/); UserPrincipal user = (UserPrincipal.FindByIdentity(context, "userName")); // Do something with user, like user.Delete();
この場合、2 行目で常に例外が発生します。
System.IO.FileNotFoundException がキャッチされました。メッセージ = ネットワーク パスが見つかりません。
ソース = Active Directory StackTrace: System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.GetInfo() 内 System.DirectoryServices.DirectoryEntry.RefreshCache() 内 System.DirectoryServices.AccountManagement.PrincipalContext.DoMachineInit() 内 System.DirectoryServices.AccountManagement.PrincipalContext System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() の System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper の .Initialize()(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) in System.DirectoryServices.AccountManagement System.DirectoryServices の .Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, String identityValue)。AccountManagement.UserPrincipal.FindByIdentity (PrincipalContext コンテキスト、文字列 identityValue) InnerException:
PrincipalContext オブジェクトのさまざまな署名を試しました (IP アドレスの代わりにドメイン名を使用する、ユーザー名とパスワードを使用するなど)。ただし、両方の試行で常に例外が発生します。
いくつかの指示がありませんか?PrincipalContext オブジェクトを作成する前に、偽装を使用してリモート マシンへの完全なアクセス権を取得する必要がありますか? 私がやろうとしていることを達成する他の方法はありますか? (つまり、リモート マシンにアクセスして Windows アカウントを追加/削除します)