سؤال

أحاول استخدام PrincipalContext للتحقق من وجود مجموعة مستخدمين محلية على جهاز كمبيوتر بعيد.

أواجه مشاكل مع PrincipalContext:

PrincipalContext ctx = new PrincipalContext(ContextType.Machine, machine, null, ContextOptions.Negotiate)

إنه يعمل في مثل هذه السيناريوهات:

  • المحلية إلى الآلة المحلية
  • المحلية إلى الجهاز الظاهري
  • جهاز المجال إلى جهاز مجموعة العمل

ومع ذلك فإنه لا يعمل في الاتجاه المعاكس:

  • الجهاز الظاهري إلى المضيف المحلي
  • آلة مجموعة العمل إلى جهاز المجال

أتلقى هذه الأخطاء:

استثناء غير معالج:System.IO.FileNotFoundException:لم يتم العثور على مسار شبكة الاتصال.

استثناء غير معالج:System.Runtime.InteropServices.COMException:لم يتم العثور على مسار شبكة الاتصال.

الاستثناء الأول مخصص للجهاز الظاهري، والثاني لجهاز مجموعة العمل.

جميع الأجهزة لديها مستخدم بنفس الاسم وكلمة المرور وتم تنفيذ الرمز من هذا المستخدم.

كيفية حل هذه القضية؟

هل كانت مفيدة؟

المحلول

لقد وجدت الجواب.يبدو أن DirectoryServices لا يعمل على نظام التشغيل Windows 7 البعيد أو الأحدث.أعتقد أنه عندما يكون الكمبيوتر في مجموعة عمل، فهو محلي ويمكننا الاتصال به وعندما يكون في مجال، فهو بعيد.

لقد اتبعت الخطوات الموضحة هنا:
System.IO.FileNotFoundException:لم يتم العثور على مسار شبكة الاتصال.استثناء أثناء استخدام كائن DirectoryEntry على نظام التشغيل Windows 7
و هنا:
http://www.peppercrew.nl/index.php/2011/09/connect-to-remote-registry-fails-with-an-error-is-preventing-this-key-from-being-opened/

Enable File and Print sharing in the Firewall
Start the Remote Registry Service
Add remote user access to this registry entry: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg

ومع ذلك، لا يمكنني تغيير الخدمات وإعدادات التسجيل على خوادم الإنتاج.لقد وجدت هذه الطريقة للحصول على المجموعة:

var server = new DirectoryEntry(string.Format("WinNT://{0},Computer", machine));
DirectoryEntry group = server.Children.Cast<DirectoryEntry>().Where(
    d => d.SchemaClassName.Equals("Group") && d.Name.Equals("Administrators")
).Single<DirectoryEntry>();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top