لا يمكن المستخدمين من إرسال رسائل بريد إلكتروني من جهاز محمول أو من مشترك علبة بريد في Exchange 2000 Server وفي Exchange Server 2003

الأعراض

عند محاولة إرسال رسالة بريد إلكتروني في Microsoft Exchange 2000 Server أو في Microsoft Exchange Server 2003، لا يمكنك إرسال رسالة البريد الإلكتروني. بالإضافة إلى ذلك، قد تتلقى إحدى رسائل الخطأ التالية أو أحد تقارير عدم التسليم (Ndr) التالية.

رسائل الخطأ

  • تم رفض الوصول
  • ليس لديك الإذن الكافي لإنجاز هذه العملية على هذا الكائن. راجع جهة اتصال المجلد أو مسؤول النظام الخاص بك.
  • خطأ في الرسالة غير مدرج
  • MAPI_E_NO_ACCESS-2147024891
  • فشل إرسال رسالة البريد لمستخدم اسم المستخدم (HRESULT:-2147024891) بوسينج المستخدم اسم المستخدم. (خطأ في أمان-لا يمكن الوصول إلى علب بريد المستخدمين).
  • لم يتم العثور على المورد
ملاحظة: تتلقى رسالة الخطأ "تم رفض الوصول" أو رسالة الخطأ "لم يتم العثور على المورد" من برنامج Microsoft Outlook Web Access عندما تقوم بتسجيل الدخول كحساب مفوض.

NDRs

  • ليس لديك الإذن لإرسال رسائل إلى هذا المستلم. للحصول على المساعدة، اتصل بمسؤول النظام.
  • تعذر إرسال الرسالة باستخدام علبة البريد. ليس لديك الإذن لإرسال الرسالة نيابة عن المستخدم المحدد.

المنتجات المتأثرة

تعرف هذه المسألة تؤثر على منتجات الجهات الأخرى التالية:
  • البحث في ملقم المؤسسة BlackBerry الحركة (ريم) (جانب)
  • جودة كل من التكنولوجيا اللاسلكية GoodLink المراسلة
قد تؤثر هذه المشكلة أيضا على MAPI مخصص أو البرامج المستندة إلى كائنات بيانات التعاون CDO إرسال رسائل بريد إلكتروني.

منتجات الجهات الخارجية الأخرى التي تستخدم حسابات الخدمة لإرسال رسائل البريد الإلكتروني قد تتأثر أيضا. إذا كنت تستخدم منتج لجهة أخرى متأثر بهذه المشكلة، نوصي بالاتصال بمورد للمساعدة على حل هذه المشكلة.

ومع ذلك، تم التحقق هناك من أن منتجات الجهات الأخرى التالية لا تتأثر بهذه المشكلة:
  • الوحدة cisco المراسلات الموحدة
  • السعي لجناح الترحيل للتبادل
  • الأداة المساعدة Microsoft ExMerge لتبادل

السبب

قد تحدث هذه المشكلة إذا تحقق أحد الشروط التالية:
  • ليس لديك أذونات لإرسال رسائل بريد إلكتروني كمالك علبة البريد في الحساب الذي تستخدمه لإرسال رسالة البريد الإلكتروني.
  • تقوم بتشغيل Microsoft Exchange 2000 Server Service Pack 3 (SP3) جنبا إلى جنب مع إصدار ملف Store.exe الذي يساوي أو أحدث من الإصدار 6619.4. تم إصدار 6619.4 أولاً توفير في مقالة "قاعدة معارف Microsoft" التالية:
    915358 يتوفر إصلاح عاجل لتغيير سلوك الإذن "Full Mailbox Access" في Exchange 2000 Server

  • تقوم بتشغيل Microsoft Exchange Server 2003 SP1 جنبا إلى جنب مع إصدار ملف Store.exe الذي يساوي أو أحدث من الإصدار 7233.51.
  • تقوم بتشغيل Exchange Server 2003 SP2 جنبا إلى جنب مع إصدار ملف Store.exe الذي يساوي أو أحدث من الإصدار 7650, 23. الإصدار 7650, 23 أولاً وقدمت في مقالة "قاعدة معارف Microsoft" التالية:
    895949 سلوك الإذن "send As" تغيير في Exchange 2003

    هذا التغيير غير المضمنة مع نظام التشغيل Exchange Server 2003 SP2. إذا تم تشغيل Exchange Server 2003 SP1 إصدار الملف Store.exe الذي يتضمن هذا التغيير، ثم قمت بالترقية إلى Exchange Server 2003 SP2، يجب تثبيت إصدار حزمة الخدمة SP2 من هذا الإصلاح العاجل الاحتفاظ بالأداء الجديد. سيتم تضمين هذا التغيير في Microsoft Exchange Server 2003 SP3.

اعتبارات الأمان

قبل إصدارات الملف Store.exe المسردة في قسم "السبب"، منح الإذن Full Mailbox Access ضمنياً منح الإذن بالإرسال كمالك علبة البريد. وهذا يعني أن حساب آخر له الإذن Full Mailbox Access إرسال رسائل بريد إلكتروني تبدو كما لو أنها تم إرسالها بواسطة مالك علبة البريد.

لقد طلبت العديد من عملاء Microsoft Exchange الإذن Send As يمكن فصلها عن الإذن Full Mailbox Access للسببين التاليين:
  • لمنع التحايل على البريد الإلكتروني.
  • للتأكد من أن البريد الإلكتروني الرسائل التي يتم إرسالها بواسطة مفوض يمكن دائماً التمييز بوضوح بين رسائل البريد الإلكتروني التي يتم إرسالها بواسطة مالك علبة البريد الفعلية.
كافة الإصدارات الجديدة من مخزن Exchange الآن سوف تتطلب الإذن "Send As" إرسال رسائل بريد إلكتروني كمالك علبة البريد. ومع ذلك، ما يلي ثلاثة استثناءات لهذا المطلب:
  • لا يتطلب حساب مالك علبة البريد أذونات Send As صريح لعلبة البريد الخاصة به.
  • الحساب الخارجي المرتبط لعلبة بريد لا تتطلب أذونات Send As صريح.
  • لا يحتاج حساب مفوض لديه الإذن Full Mailbox Access أيضا أذونات Send As صريح.
لمزيد من المعلومات حول هذه الاستثناءات، راجع قسم "مزيد من المعلومات".

الحل

كافة الحسابات التي يتم منحها الوصول كاملة أو جزئية إلى علبة بريد، ما عدا تلك المذكورة في قسم "السبب"، يجب أن الآن صراحة منح الإذن Send As لحساب مالك علبة البريد لإرسال بريد باعتباره مالك علبة البريد. وهذا يشمل حسابات خدمة التطبيق التي تقوم بوظائف مثل إرسال رسائل البريد الإلكتروني لمستخدمي الأجهزة المحمولة.

ينطبق الإذن Send As على هوية كائن مستخدم "Active Directory"، لا على محتويات علب البريد التي تم تخزينها في قاعدة بيانات. ولذلك، يجب منح الإذن Send As لحساب الخدمة على كل كائن المستخدم الذي يملك علبة بريد. عند إرسال رسائل البريد الإلكتروني، لا يتم إرسالها من قاعدة بيانات أو علبة بريد معينة، لكن من مستخدم. قد يكون المستخدم مالك علبة البريد أو أي حساب آخر له الإذن Send As.

لا يمكنك منح الإذن Send As على خادم يقوم بتشغيل Exchange Server أو على كائن قاعدة بيانات والحصول على تأثير منح الإذن Send As لكافة علب البريد الموجودة في قاعدة البيانات. منح الإذن Send As على كائن قاعدة بيانات Exchange يمنحك الإذن بقاعدة البيانات نفسها. يتم توريث الإذن كافة علب البريد الموجودة في قاعدة البيانات. ومع ذلك، فإنه لا يمنح الإذن للمستخدمين الذين لديهم أذونات Send As والذين لديهم علب البريد الموجودة في قاعدة البيانات.

ملاحظة: منح الإذن Receive As على قاعدة بيانات Exchange هو المعادل الوظيفي لمنح الإذن Full Mailbox Access لكافة علب البريد الموجودة في قاعدة البيانات. هذا يختلف عن سلوك الإذن Send As.

كيفية منح أذونات Send As لحساب واحد

لمنح إذن حساب آخر لإرسال كمالك علبة بريد، اتبع الخطوات التالية:
  1. بدء تشغيل وحدة تحكم إدارة مستخدمي Active Directory وأجهزة الكمبيوتر.
  2. من القائمة عرض ، تأكد من
    يتم تحديد الخيار ميزات متقدمة . إذا لم يتم تحديد هذا الخيار، لن تظهر كائنات حساب المستخدم صفحة الأمان.
  3. افتح خصائص حساب المستخدم الذي يملك علبة البريد.
  4. انقر فوق علامة التبويب أمان .
  5. إذا لم يكن الحساب مسبقاً في قائمة أسماء المجموعات أو المستخدمين، إضافة الحساب الذي يجب أن يكون لديك إذن "Send As" الخاصة بهذا المستخدم.
  6. في مربع الحوار أذونات ، انقر فوق إذن السماح "Send As" لحساب المناسبة.
  7. انقر فوق موافق.
  8. قم بإعادة تشغيل خدمة مخزن معلومات Microsoft Exchange على ملقم Exchange متأثر.
ملاحظة: في حالة عدم تشغيل خدمة مخزن معلومات Microsoft Exchange، خدمة مخزن معلومات Microsoft Exchange سيتم تحديث ذاكرة التخزين المؤقت الأذونات الخاصة به الكمبيوتر الجديد أذونات نافذة المفعول طبقاً للقيمة التي تم تعيينها في مفتاح التسجيل الفرعي التالي:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem
اسم القيمة: "حد المدة الزمنية لذاكرة التخزين المؤقت" علبة البريد
نوع القيمة: REG_DWORD
الرقم الأساسي: عشري
قيمة البيانات: الحد العمري ذاكرة التخزين المؤقت لمعلومات علبة البريد بالدقائق.
القيمة الافتراضية لإدخال التسجيل هذا 120 دقيقة (ساعتان). إذا قمت بتعديل إدخال التسجيل هذا، يجب إعادة تشغيل خدمة مخزن معلومات Microsoft Exchange.

ملاحظة: إذا قمت بتعيين قيم المهلة إلى قيمة منخفضة جداً، قد يؤثر على أداء الخادم.

كيفية منح الإذن Send As لحسابات عديدة

يتم توفير برنامج نصي نموذج في نهاية هذه المقالة البحث في مجال خدمة "Active Directory" للحسابات التي لها إذن Full Mailbox Access دون إذن "Send As" لعلبة بريد. هذه هي خصائص حساب الخدمة أو الموارد التي سوف تتأثر بتغيير الأمان هذا. يمكن للبرنامج النصي إنشاء ملف تصدير يمكنك مراجعة وتحريرها وإعادة استيراده لمنح الإذن Send As إلى الحسابات التي تتطلب هذا الإذن.

يمكنك أيضا منح الإذن Send As بالميراث على كل كائن المستخدم في مجال "Active Directory" أو في حاوية. في حالة منح الإذن Send As باستخدام هذه الطريقة، يمكنك منح أذونات لكائنات غير مقصودة. بالإضافة إلى ذلك، فقد تفقد أذونات للكائنات التي تم نقلها من الحاوية. ولذلك، لا يفضل هذا الأسلوب وقد ضمانات الأمان يجب مراعاتها قبل اتباعها.

في حالة منح الإذن Send As باستخدام هذه الطريقة، ستصبح الحسابات التي ورثت الإذن Send As غير مرئية للبرنامج النصي الذي تتم الإشارة إليه في نهاية المقال. لمعالجة تلك الحسابات باستخدام البرنامج النصي في وقت لاحق، يجب إزالة إذن Send As المتوارث أولاً.

لمنح الإذن Send As لحساب واحد على كافة حسابات المستخدمين في مجال "Active Directory" أو الحاوية باستخدام الوراثة، اتبع الخطوات التالية:
  1. بدء تشغيل وحدة تحكم إدارة مستخدمي Active Directory وأجهزة الكمبيوتر.
  2. من القائمة عرض ، تأكد من
    يتم تحديد الخيار ميزات متقدمة . إذا لم يتم تحديد هذا الخيار، لن تظهر الكائنات الحاوية والمجال صفحة الأمان.
  3. افتح خصائص المجال أو الحاوية ومن ثم انقر فوق صفحة الأمان.
  4. انقر فوق خيارات متقدمة.
  5. إذا كان الحساب الذي يتطلب إذن هو مدرج بالفعل، انقر فوق إضافة، وثم حدد الحساب. وإلا، انقر نقراً مزدوجاً فوق الحساب للتحرير.
  6. في القائمة تطبيق على ، انقر فوق
    كائنات المستخدم.
  7. منح الحساب الإذن Send As.
  8. انقر فوق موافق إلى أن يتم إنهاء وحفظ كافة التغييرات.

قواعد خاصة لحسابات adminSDHolder المحمية

في حالة استخدام البرنامج النصي لمنح الإذن Send As لمالك علبة بريد الذي يعتبر مسؤول مجال، لن تكون فعالة الإذن Send As. نوصي بشدة بأن تقوم لا بتمكين حسابات المستخدمين التي لها حقوق مسؤول المجال أو adminSDHolder المحمية.



هو كائن adminSDHolder قالب للحسابات التي يكون لديك حقوق إدارية واسعة Active Directory. لمنع رفع الامتيازات غير مقصودة، أي حساب محمي بواسطة الكائن adminSDHolder يجب أن يكون لديك الأذونات التي تتطابق مع تلك المسردة في الكائن adminSDHolder نفسه.



إذا قمت بتغيير الحقوق أو الأذونات على الكائن adminSDHolder لحساب محمي، مهمة خلفية سيتم التراجع عن التغيير في خلال عدة دقائق. على سبيل المثال، إذا قمت بمنح الإذن Send As على كائن مسؤول مجال لحساب خدمة تطبيق، مهمة الخلفية تلقائياً سيبطل الإذن.



ولذلك، لا يمكن منح الإذن Send As لحساب خدمة تطبيق حساب محمي بواسطة الكائن adminSDHolder إلا إذا قمت بتغيير الكائن adminSDHolder نفسه. إذا قمت بتغيير الكائن adminSDHolder ، سيتم تغيير أذونات الوصول لكافة الحسابات المحمية. يجب تغيير الكائن adminSDHolder فقط بعد إجراء استعراض كامل للآثار الأمنية التي قد تحدث مع التغيير.


لإقران حساب محمي بواسطة الكائن adminSDHolder علبة بريد، اتبع الخطوات التالية:
  1. بدء تشغيل وحدة تحكم إدارة مستخدمي Active Directory وأجهزة الكمبيوتر.
  2. من القائمة عرض ، تأكد من
    يتم تحديد الخيار ميزات متقدمة . إذا لم يتم تحديد هذا الخيار، لن تظهر كائنات حساب المستخدم صفحة الأمان.
  3. إنشاء حساب مستخدم عادي بمثابة مالك علبة البريد.
  4. تعيين حساب المستخدم العادي في علبة بريد في Exchange server.
  5. افتح خصائص حساب مالك علبة البريد الجديد.
  6. في المربع Exchange المتقدم ، منح الإذن "Full Mailbox Access" لحساب المسؤول المحمية.
  7. في صفحة الأمان، منح الإذن Send As لحساب المسؤول المحمية.
  8. انقر فوق "موافق" للخروج من خصائص كائن مالك علبة البريد.
  9. زر الماوس الأيمن فوق كائن حساب مالك علبة البريد، ومن ثم انقر فوق تعطيل الحساب لتعطيل الحساب لكافة تسجيلات الدخول.
لمزيد من المعلومات حول حسابات adminSDHolder المحمية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

907434 "Send As" إزالة حق من كائن مستخدم بعد تكوين "Send As" الحق في مستخدمي Active Directory وأجهزة الكمبيوتر الإضافية في Exchange Server

318180 على مؤشر ترابط AdminSDHolder الأعضاء المتعدين من مجموعات التوزيع

817433 Delegated لا تتوفر الأذونات وتعطيل التوارث تلقائياً

306398 الكائن AdminSDHolder يؤثر على تفويض التحكم لحسابات المسؤولين الماضية

مهام خاصة لملقم المؤسسة بلاك

المهمة 1: التأكد من تشغيل ملقم المؤسسة BlackBerry كحساب منفصل، فريدة من نوعها

تأكد من تشغيل ملقم المؤسسة BlackBerry كحساب منفصل تم إنشاؤه خصيصا للمهام الإدارية. بشكل افتراضي، يسمى هذا الحساب "BESAdmin".

إذا كان لديك حساب مستقل لإدارة ملقم المؤسسة BlackBerry، انتقل إلى المهمة الثانية.


إذا لم تكن حساب منفصل، إنشاء حساب منفصل. وبعد ذلك، استخدم هذا الحساب لأداء المهام الإدارية. للحصول على إرشادات حول كيفية القيام بذلك إذا كنت تستخدم BlackBerry Enterprise Server 4.0 أو 4.1 ملقم المؤسسة BlackBerry، راجع "دليل تثبيت ملقم المؤسسة بلاك".  للحصول على إرشادات حول كيفية القيام بهذا إذا كنت تقوم بتشغيل 3.6 ملقم المؤسسة BlackBerry، راجع تثبيت Server 2000/2003 المؤسسة بلاك ودليل بدء التشغيل.

المهمة الثانية: تأكد من أن حساب خدمة ملقم المؤسسة BlackBerry لديه الأذونات المناسبة

تأكد من أن حساب خدمة ملقم المؤسسة BlackBerry لديه الأذونات المناسبة.

ملاحظة: إذا كان الحساب في مجال ما، تأكد من أن الحساب عضو في مجموعة Domain Users. في وحدة تحكم مجال، يجب أن يكون الحساب عضوا مجموعة Administrators المضمنة.
  1. على ملقم المؤسسة BlackBerry، اتبع الخطوات التالية:
    1. تأكد من أن الحساب عضو مجموعة "المسؤولين المحليين".
    2. تعيين أذونات "تسجيل الدخول محلياً" و "تسجيل الدخول ك خدمة" للحساب.
  2. مسؤول View-Only Exchange منح أذونات على مستوى المجموعة الإدارية. للقيام بذلك، اتبع الخطوات التالية:
    1. في Exchange System Manager، انقر نقراً مزدوجاً فوق اسم المجموعة الإدارية Exchange Server الأول وثم انقر فوق تفويض التحكم.
    2. لاحظ وجود حساب خدمة ملقم المؤسسة BlackBerry لها دور مسؤول Exchange View-Only.
  3. منح الإذن "Send As،" "ك"، ومستوى أذونات "إدارة مخزن المعلومات" على الخادم لكل ملقم Exchange. للقيام بذلك، اتبع الخطوات التالية:
    1. في Exchange System Manager، انقر فوق اسم المجموعة الإدارية Exchange Server الأول ثم قم بتوسيع
      مجموعة ملقمات .
    2. انقر بالزر الأيمن على ملقم Exchange، انقر فوق
      خصائص، ومن ثم انقر فوق
      الأمان.
    3. في الجزء العلوي، حدد حساب خدمة "ملقم المؤسسة بلاك". في الجزء السفلي، تأكد من أن "Send As،" "تلقي باسم" وأذونات "إدارة مخزن المعلومات" تم تعيينها
      السماح.
    4. كرر الخطوات 3 باء و 3 جيم لكل ملقم Exchange.
  4. منح الإذن "Send As،" "تلقي باسم" وأذونات "إدارة مخزن المعلومات" إلى مخزن علبة البريد. للقيام بذلك، اتبع الخطوات التالية:
    1. في Exchange System Manager، انقر نقراً مزدوجاً فوق اسم المجموعة الإدارية الصرف الأول ثم قم بتوسيع
      مجموعة ملقمات .
    2. قم بتوسيع المجموعة الأولى مخزن علبة البريد وانقر نقراً مزدوجاً فوق كل مخزن علبة البريد، انقر فوق خصائصوثم انقر فوق
      الأمان.
    3. في الجزء العلوي، حدد حساب خدمة "ملقم المؤسسة بلاك". في الجزء السفلي، تأكد من أن "Send As،" "تلقي باسم" وأذونات "إدارة مخزن المعلومات" تم تعيينها
      السماح.
    4. كرر الخطوات 4 باء وجيم 4 لكل مخزن علبة البريد على كل ملقم Exchange.
  5. في الأداة الإضافية مستخدمي Active Directory وأجهزة الكمبيوتر، اتبع الخطوات التالية:
    1. زر الماوس الأيمن فوق المستخدم الذي تريد إضافة أذونات ومن ثم انقر فوق خصائص.
    2. في التبويب أمان ، إضافة حساب خدمة ملقم المؤسسة BlackBerry، وثم انقر لتحديد
      إرسال خانة الاختيار.
إذا لم يتم تشغيل Exchange Server 2003، راجع المهمة الثالثة.

المهمة الثالثة: مسح ذاكرة التخزين المؤقت على "ملقم المؤسسة بلاك"

لمسح ذاكرة التخزين المؤقت الأذونات في مخزن Exchange، قم بإعادة تشغيل الخدمات المرتبطة بلاك، وإعادة تشغيل مخزن معلومات Microsoft Exchange. بعد إعادة تشغيل مخزن Exchange، يجب إعادة تشغيل خدمات متعلقة "ريم بلاك" إلى منح الحساب "BESAdmin" المضافة حديثا الإذن Send As على مخزن Exchange.

مزيد من المعلومات

أذونات الوصول إلى علبة البريد والمجلدات Exchange منقسمة بين قواعد بيانات Active Directory و Microsoft Exchange. ومع ذلك، يتم تعيين كلا نوعي الأذونات في وحدة تحكم إدارة مستخدم Active Directory، ولكن يتم تخزين الأذونات المختلفة في موقعين منفصلين.

بشكل عام، إذا تم تعيين إذن على صفحة الأمان لكائن، أنها إذن Active Directory. إذا تم تعيينها على صفحة Mailbox Rights المتقدمة Exchange، أنها إذن قاعدة بيانات Exchange.

السمة msExchMailboxSecurityDescriptor Active Directory نسخة احتياطية لمجموعة فرعية من الحقوق الفعالة علبة البريد. يتم استخدامه داخليا عن طريق تبادل لأغراض متنوعة. بالإضافة إلى ذلك، يتم تحديث السمة msExchMailboxSecurityDescriptor لتتطابق مع الحقوق الفعالة الحالية في حالة استخدام المسؤولين للواجهات المعتمدة لتعيين الحقوق. ومع ذلك، إذا تم تعديل السمة msExchMailboxSecurityDescriptor مباشرة بواسطة مسؤول، التغييرات لن يكون نشر إلى مخزن Exchange، ولا أن تصبح التغييرات نافذة المفعول. فإنه لا يضمن أن يكون متزامنا مع حقوق علبة البريد الفعلية. يجب عدم استخدام السمة msExchMailboxSecurityDescriptor لقراءة أو كتابة حقوق علبة البريد.
لمزيد من المعلومات، انقر فوق رقم المقالة التالية لعرضها في "قاعدة معارف Microsoft":

310866 كيفية تعيين حقوق علبة بريد Exchange Server 2003 و Exchange 2000 Server على علبة موجود في مخزن المعلومات


الإذن Full Mailbox Access إذن مخزن قاعدة بيانات Exchange. الإذن Send As إذن "خدمة active Directory". قبل Store.exe تبادل ملف التغييرات الموضحة في هذه المقالة، نظام الصرف لم تتشاور مع الإعداد للحصول على إذن Send As إذا كان المرسل الفعل إذن Full Mailbox Access.

وقد مكن إدراج الإذن Send As باستخدام الإذن Full Mailbox Access مسؤولي ملقم Exchange منح أذونات Send As الفعالة لأي علبة البريد على ملقم يديروا أنفسهم. بتقسيم الإذن "Send As" من الإذن Full Mailbox Access، حظر المسؤولين Active Directory الآن هذه العملية لأن الإذن Send As Active Directory وأذن لا Exchange مخزن. ولذلك، العملية ليست تحت تحكم مسؤولي Exchange.

مالكي علب البريد

يتم تعريف مالك علبة بريد كحساب مستخدم "Active Directory" الذي سمته msExchMailboxGUID يحمل المعرف الفريد العمومي (GUID) لعلبة بريد محددة. يسمح حساب واحد فقط في المجال الأم بأكمله له GUID لعلبة بريد محددة. إذا حاولت تعيين مالك ثاني بنفس المعرف الفريد العمومي، سيرفض Active Directory التغيير مع وجود خطأ.


عندما تقوم بتمكين حساب "أو" عند الاتصال علبة قطع حساب "Active Directory"، صندوق البريد GUID يتم تلقائياً تعيين هذا الحساب. نادراً ما يتم اللازمة أو المستحسنة للمسؤولين بتعيين Guid علبة البريد مباشرة.

حسابات خارجية مقترنة

تكوين Exchange شائعة تثبيت Exchange في مجموعة تفرعات مورد. هو مجموعة تفرعات موارد الغابات في مجموعة مختلفة من حسابات المستخدمين التي سيكون لها علب بريد في النظام. ويمثل ذلك مشكلة لأنه يمكن تعيين السمة msExchMailboxGUID فقط في الكائنات الموجودة في نفس الغابة Exchange server.

الحل لهذه المشكلة تمكين علبة البريد الخاصة أحد الحسابات في المجال الأم لملقم Exchange. ثم ربط هذا الحساب تمكين علبة بريد لأحد في مجموعة تفرعات أخرى أو في مجال Microsoft Windows NT 4. يمكنك القيام بذلك عن طريق منح الإذن Associated External Account. يمكن منح الإذن Associated External Account حساب واحد فقط. يجب أن يكون الحساب المحدد من مجال أم مختلف.

عندما تقوم بتعيين الإذن Associated External Account، كتابة قيمة معرف أمان الحساب الخارجي للسمة msExchMasterAccountSID من مالك علبة البريد. لذلك، هذا ليس إذن على الإطلاق، لكن طريقة ملائمة للتحكم في قيمة السمة msExchMasterAccountSID . بعد msExchMasterAccountSID تعيين سمة، الحساب الخارجي الذي يملك SID سيتم منح الوصول الصرف كما لو كان حساب مالك علبة البريد الفعلية.

ملاحظة: ينطبق هذا فقط على تبادل وصول، لا للوصول إلى "Active Directory" كافة. بالإضافة إلى ذلك، يجب تعليم حساب مالك علبة البريد كمعطل لتسجيلات الدخول بعد تعيين الإذن Associated External Account حيث تعمل كافة الأذونات كما هو متوقع.

لمزيد من المعلومات، انقر فوق رقم المقالة التالية لعرضها في "قاعدة معارف Microsoft":

300456 أذونات وتفويضات العميل لا تستمر بعد تعيينه في Exchange 2000

وحدات سيناريو التفويض

مفوض هو مستخدم تم منح وصول جزئية إلى علبة بريد أخرى والحق في إرسال رسائل بريد إلكتروني بالنيابة عن مالك علبة البريد هذه. سيناريو تفويض الشائع في منح المفوض صلاحية الوصول إلى مساعد إداري للتقويم الخاص بالتنفيذيين. عادة المفوض قراءة وتحديث التقويم. بالإضافة إلى ذلك، يمكن للمفوض الرد لأي رسائل بريد إلكتروني بالنيابة عن المدير التنفيذي.

يمكنك استخدام الواجهتين التاليتين لإرسال نيابة عن منح وأذونات المفوض:
  • في كائن مالك علبة البريد، امنح Send on behalf العامة تبادل مربع الحوار.
  • في Microsoft Office Outlook، استخدم مربع الحوار المفوضين .
هذه الطرق بتعيين السمة بوبليكديليجاتيس من علبة البريد. يكون لدى كافة المستخدمين الذين تم سردهم في هذه السمة Send on behalf مالك علبة البريد. عندما مثل هؤلاء المفوضين بإرسال رسالة بريد إلكتروني يحتوي على اسم المالك في المربع من ، يتم إرسال رسالة البريد الإلكتروني من المفوض وليس من أو كمالك علبة البريد. يعرض مربع رسالة البريد الإلكتروني من القيمة التالية:
<اسم المفوض> باسم <مالك علبة البريد>
في بعض الحالات، قد يكون غير قادر على تعيين سمة بوبليكديليجاتيس في Outlook.
لمزيد من المعلومات، انقر فوق رقم المقالة التالية لعرضها في "قاعدة معارف Microsoft":

لم يتم تعيين أذونات "send on behalf" 329622 لمستخدم بعد قمت بتفويض الوصول في Outlook


إذا منح المفوض صلاحية الوصول إلى علبة البريد الخاصة بك، يمكن للمفوض استخدام Send on behalf حتى إذا لم تمنحهم حق الوصول إلى أي من مجلدات علبة البريد الخاصة بك. الأذونات الأساسية التي يكون للمفوض هو Send on behalf. أذونات الوصول إلى مجلدات علبة البريد الخاصة بك منفصلة ويجب منحها بالإضافة إلى أذونات التفويض. بشكل عام، سيستخدم المفوضون Outlook للوصول إلى المجلدات الفردية التي يمكنك منحهم أذونات خاصة بها. للقيام بذلك، انقر فوق فتح في القائمة ملف في Outlook ومن ثم انقر فوق مجلد "مستخدم آخر".

بدلاً من ذلك، فتح علبة من قبل المندوبين بإدراجها كعلبة بريد إضافية في
التبويب خيارات متقدمة في ملفات تعريف Outlook الخاصة بهم. تؤدي هذه الطريقة علبة البريد الخاصة بك تظهر في شجرة مجلدات Outlook المفوض. بالإضافة إلى ذلك، تتيح هذه الطريقة إمكانية الوصول إلى كافة المجلدات الموجودة في علبة البريد التي تفويض منح أذونات.

قد تحتاج المفوض أن يكون Send on behalf أحياناً وفي أحيان أخرى يكون الإذن Send As. لتكوين مفوض بهذين الأذنين، اتبع الخطوات التالية:
  • منح الإذن Full Mailbox Access للمفوض. لا يمكن إجراء ذلك من خلال Outlook. بدلاً من ذلك، مسؤول "خدمة active Directory" يجب القيام بذلك على حساب مالك علبة البريد. حتى إذا قمت بمنح أذونات مالك كل مجلد في علبة البريد الخاصة بك، ليس هذا هو نفس الإذن مثل الإذن Full Mailbox Access.
  • لا تمنح المفوض الإذن Send As. في حالة منح المفوض إذن Send As، ستتم كافة رسائل البريد الإلكتروني التي يتم إرسالها بواسطة المفوض مع الإذن Send As. لن تكون قادراً على استخدام Send on behalf المفوض.
في هذا السيناريو، المفوضون الذين يريدون استخدام Send on behalf يجب تسجيل الدخول إلى علب البريد الخاصة بهم. إذا كان الرد على المفوضين أو إعادة توجيه رسالة بريد إلكتروني بالفعل في أحد المجلدات الخاصة بك، سيتم إرسال رسالة البريد الإلكتروني تلقائياً بالنيابة عنك. إذا قام المفوضون بإنشاء رسالة بريد إلكتروني جديدة بالنيابة عنك، يجب إدخال اسمك في المربع " من " في رسالة البريد الإلكتروني المطلوب إرسالها بالنيابة عنك.

بغض النظر عن ما إذا كان المندوبون بفتح المجلدات أو علبة البريد الكامل كعلبة بريد ثانوية، سيتم استخدام كافة رسائل البريد الإلكتروني التي قاموا بإرسالها من Send on behalf طالما أن علب البريد الخاصة بهم هي علب البريد الأساسية لملف تعريف Outlook الحالي.

عندما يرغب المفوضون في إرسال رسالة بريد إلكتروني عند، يجب تسجيل الدخول إلى علبة البريد الخاصة بك باستخدام ملف تعريف Outlook منفصل على فتح علبة البريد الخاصة بك. سيتم إرسال رسائل البريد الإلكتروني التي يقوم المفوضون بإرسالها أثناء تسجيل دخولك بملف التعريف هذا تلقائياً من قبلك.

البحث عن الحسابات التي لها إذن Full Mailbox Access دون إذن Send As

عينة البرنامج النصي الموضح في هذا القسم البحث مجال Active Directory في كل مرة لحسابات المستخدمين حيث تم منح الإذن Full Mailbox Access لعلبة بريد دون الحصول على إذن Send As.


هام: قبل تغيير الأذونات، راجع المقطع "حول مالكي علب البريد الحاصلين على تفويضات".

يحتوي البرنامج النصي على الأوضاع الثلاثة التالية:
  • تصدير يمكنك إخراج قائمة المستخدمين الذين لديهم إذن Full Mailbox Access ولكن لا الإذن Send As. يمكنك حينئذ مراجعة هذه القائمة في المفكرة أو محرر آخر لإزالة أية حسابات لا تريد الإذن Send As.
  • استيراد يمكنك استيراد قائمة بالمستخدمين الذين لديهم الإذن Full Mailbox Access الذي إذن Send As ينبغي أيضا منح. لاحظ أنه لا يمكنك استخدام هذا البرنامج النصي لمنح الإذن Full Mailbox Access والإذن Send As على حد سواء. يجب أن يكون لكل حساب الإذن "Full Mailbox Access" منح الإذن Send As مسبقاً.
  • SetAll يمكنك منح الإذن Send As لكافة المستخدمين في المجال من يملكون الإذن Full Mailbox Access لعلبة بريد محددة. سيتم إنشاء ملف سجل في نفس تنسيق ملف التصدير. وهذا يماثل تشغيل طرق التصدير والاستيراد دون تحرير ملف التصدير.
ملاحظة: لا توجد أية وظيفة "تراجع" في هذا البرنامج النصي.

الأذونات المطلوبة للبرنامج النصي

يجب تشغيل البرنامج النصي عندما قمت بتسجيل الدخول باستخدام حساب إداري من نفس المجال الأم الموجودة في حسابات مالكي علب البريد. قد لا يعمل البرنامج النصي باستخدام حساب له أذونات إدارية عبر مجال أم. أيضا قد يعمل البرنامج النصي غير عند تشغيله من محطة عمل تم ضمها إلى مجموعة مختلفة من الغابات التي يتم ربط حسابات مالكي علب البريد.

نظراً لهذه الظروف، يمكنك تشغيل البرنامج النصي مع حسابات إدارية متعددة في جلسة عمل تسجيل دخول مفرد باستخدام الأمر RunAs.exe . قد يكون هذا الإجراء مفيداً إذا كان لديك أذونات الدليل النشط و Exchange Server مجزأة ولديك حساب واحد لا يمكنك إدارة كافة مجالات "Active Directory" أو كافة ملقمات Exchange. يمكنك فتح موجه الأوامر لتشغيل البرنامج النصي كحساب إداري لكل. خذ بعين الاعتبار المثال التالي:
RunAs.exe /user:domain\account CMD.EXE
ملاحظة: يجب عدم تشغيل نسخ متعددة من البرنامج النصي في نفس الوقت في نفس المجال.

الحقول الموجودة في ملف التصدير كما يلي. وصف الحقول بالترتيب الذي يتم به في ملف التصدير.
  • اسم العرض لحساب مالك علبة البريد

    قد يكون هناك أكثر من سطر في ملف المخرجات يحتوي على نفس مالك علبة البريد. يحدث هذا السلوك عند حسابات أخرى متعددة لها أذونات Full Mailbox Access لنفس علبة البريد.
  • المجال واسم تسجيل الدخول لحساب لديه أذونات Full Mailbox Access ولكن ليس إذن Send As

    قد يظهر نفس الحساب عدة مرات في ملف التصدير عند الحساب لدى الوصول إلى علب بريد متعددة. وهذا من المرجح أن تكون هذه حالة حساب خدمة تطبيق أو شخص يقوم بإدارة علب بريد موارد متعددة.
  • اسم العرض لحساب لديه الإذن Full Mailbox Access ولكن ليس إذن Send As

    يتوفر هذا الحقل بالإضافة إلى حقل اسم تسجيل الدخوللتسهيل عملية التعرف على الحساب.
  • حالة المفوض من قبل مالك علبة البريد

    إذا كان مالك علبة البريد تفويضات، تكون قيمة الحقل
    مندوبين. إذا كان مالك علبة البريد لم تفويضات، تكون قيمة الحقل هي No Delegates.
  • حالة تمكين أو تعطيل حساب مالك علبة البريد

    يكون هذا الحقل مفيداً عندما تريد تحديد حسابات الموارد أو حسابات علب بريد عبر مجال. يتم عادة تعطيل هذه الحسابات.
  • الاسم الكامل المميز لحساب مالك علبة البريد

    يكون هذا الحقل مفيداً عندما تريد تحديد المجال والحاوية لحساب مالك علبة البريد.
  • الاسم الكامل المميز لقاعدة بيانات علبة بريد مالك علبة البريد

    يتضمن هذا الحقل قاعدة البيانات ومجموعة التخزين، الملقم والمجموعة الإدارية لعلبة البريد.
في المثال التالي، المستخدم الذي له اسم تسجيل الدخول "نوسينداس" لديه الإذن Full Mailbox Access ولكن لا الإذن Send As لعلبة البريد "مالك علبة البريد":
"" "مالك علبة البريد" "" "" "Domain\NoSendAs" "" "" "عدم إرسال كمستخدم" "" "" "لديه تفويضات" "" "" "تمكين" "" [حقول إضافية تم حذفها]

تكوين محطة العمل الإدارية للبرنامج النصي

يستخدم هذا البرنامج النصي واجهات إدارة Exchange للاتصال بملقمات Exchange. لذلك، هذا البرنامج النصي يجب تشغيل من ملقم Exchange أو من محطة عمل بنظام مسؤول Exchange مثبت.

تحرير ملف التصدير

يتم تنسيق ملف التصدير بتنسيق Unicode النص العادي حيث يقوم بتعيين أحرف من لغات متعددة يمكن استيعابها. بعض برامج تحرير النص قد لا تتمكن من عرض أو تحرير الملف بشكل صحيح أو قد يتم حفظ الملف كنص ANSI أو ASCII. يمكن لفائدة برنامج "المفكرة" لنظام التشغيل Microsoft Windows 2000 ونظام التشغيل Windows XP أو Windows Server 2003 بشكل صحيح لمعالجة الملفات النصية Unicode. بالإضافة إلى ذلك، Microsoft Office Excel بشكل صحيح معالجة ملفات نص Unicode.

ملف الإخراج في تنسيق محدد بعلامات جدولة بثلاث علامات اقتباس حول القيم الخاصة بكل حقل. يتم استخدام علامات الاقتباس الثلاثة للاستيراد والتصدير من Excel بشكل حتمي. في Excel، علامات الاقتباس الثلاثة سوف تصبح علامات اقتباس مفردة، وسأعود إلى ثلاث علامات اقتباس عند حفظ الملف مرة أخرى كنص Unicode. راجع الإرشادات التالية لفتح وحفظ ملف تصدير في Excel بشكل صحيح.

يمكنك أيضا تصفية ملف تصدير دون استخدام Excel عن طريق استخدام الأداة المساعدة Find.exe أو الأداة Findstr.exe. هذه الأدوات المساعدة المضمنة مع Windows. تسمح لك بالبحث عن كلمات في ملف وإخراج الأسطر التي تحتوي على هذه الكلمات فقط، أو السطور التي لا تحتوي على هذه الكلمات. على سبيل المثال، إذا كنت تريد إنشاء قائمة بكافة مالكي علب البريد الذين لهم مفوضين الملف، استخدم أي من هذه الأوامر لإنشاء ملف يحتوي على سطور تحتوي على السلسلة "Has Delegates" فقط:
Find.exe "لديه تفويضات" OriginalFile.txt > HasDelegates.txt

Findstr.exe/c: "لديه تفويضات" OriginalFile.txt > HasDelegates.txt
وكمثال آخر، افترض أن استبعاد كافة مالكي علب البريد مع المندوبين. رمز التبديل /V بإخراج كافة السطور التي لا تطابق كلمات البحث. يمكنك استخدام أي من هذه الأوامر لإنشاء ملف يستثني كافة بنود "Has Delegates":
Find.exe OriginalFile.txt "لا Delegates" > NoDelegates.txt


Find.exe/V "لديه تفويضات" OriginalFile.txt > NoDelegates.txt


/C: Findstr.exe OriginalFile.txt "لا Delegates" > NoDelegates.txt


/C: &/V Findstr.exe "لديه تفويضات" OriginalFile.txt > NoDelegates.txt
يمكنك أيضا استخدام هذه الأوامر لإنشاء ملف يسرد كافة الحسابات حيث لديه الإذن Full Mailbox Access حساب خدمة تطبيق ولكن ليس لديه الإذن Send As. يجعل رمز التبديل /I الأمر حساسة لحالة الأحرف:
Find.exe /I "domain\ServiceAccount" OriginalFile.txt > ServiceAccount.txt


Findstr.exe /I /C:"domain\ServiceAccount" OriginalFile.txt > ServiceAccount.txt
ملاحظة: إذا كنت تستخدم الأداة المساعدة Find.exe لإنشاء ملف تمت تصفيتها، يجب إزالة خطوط العارضة التي ستقوم بإنشاء أداة Find.exe في أعلى الملف.

عدم استخدام أسماء الملفات حرف البدل (*. *) مع الأداة Findstr.exe. إذا كنت تستخدم أحرف البدل، سيتم استهلال كل سطر في ملف المخرجات باسم الملف. يجب فحص ملف المخرجات بعناية بعد تصفية باستخدام Find.exe أو Findstr.exe للتحقق من أن عامل التصفية الحسابات الذي تريده.

في المثال التالي، المستخدم الذي له اسم تسجيل الدخول "نوسينداس" لديه الإذن Full Mailbox Access، ولكن لا الإذن Send As لعلبة البريد "مالك علبة البريد".
"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [additional fields omitted] 

حول مالكي علب البريد الذين لهم مفوضين

يجب أن يتم مفوض لديه Full Mailbox Access (يعرف أيضا "مفوض ذو الصلاحيات الأعلى") عادة عدم منح الإذن Send As. عند تسجيل المفوض ذو الصلاحيات الأعلى مباشرة إلى علبة البريد الخاصة بمالك علبة، يمكن إرسال المفوض كمالك. عند استخدام التفويض Outlook ميزات التفويض (علب البريد الإضافية لفتح أو فتح مجلد مستخدم آخر)، يتم إرسال الرسائل بالنيابة عن المالك.

منح الإذن Send As لمفوض ذو الصلاحيات الأعلى فقط إذا كنت تريد أن يقوم المفوض دائماً بالإرسال كمالك علبة البريد أو لا يؤدي إلى إرسال بالنيابة عن مالك علبة البريد. نوصي بالبحث في ملف التصدير للنص "Has Delegates" وثم تحديد ما إذا كانت أي من المفوضين ذوي الصلاحيات الأعلى المدرجة فعلا المفوضين من قبل مالك علبة البريد.

يتم سرد المفوضين ذوي الصلاحيات الأعلى فقط في ملف التصدير. لم يتم المفوضين العادية الإذن Full Mailbox Access. بالإضافة إلى ذلك، عند منح الإذن Send As لمفوض عادي، سيرسل المفوض دائماً كمالك علبة البريد. يكون هذا صحيحاً حتى في حالة التفويض العادية ليس لديه الإذن Full Mailbox Access. في حالة منح أذونات Send As لمفوض عندما كنت لا تنوي، يمكن بسهولة إبطال هذا الإذن لاحقاً.

كيفية فتح ملف تصدير في Excel

  1. بدء تشغيل Excel قبل فتح ملف التصدير.
  2. فتح الملف في Excel بكتابة "ملفات نصية". يبدأ تشغيل "معالج استيراد النص".
  3. في "معالج استيراد النص"، تغيير أو قبول الإعدادات التالية:
    • نوع البيانات الأصلي: محدد
    • بدء الاستيراد عند الصف: 1
    • أصل الملف: Unicode (utf-8)
    • المحددات: علامة جدولة
    • معاملة المحددات المتتالية كواحدة: لا تحمل علامات
    • مؤهل النص: "(المزدوج علامات اقتباس)

كيفية حفظ ملف تصدير بعد تحريره في Excel

  1. في ملف التصدير، انقر فوق حفظ باسم.
  2. حفظ الملف باستخدام اسم مختلف بحيث يمكنك الاحتفاظ بنسخة من الملف الأصلي، لم.
  3. انقر فوق ملف، انقر فوق حفظ باسم، أدخل اسم ملف لحفظ المخرجات وثم انقر فوق نص Unicode في القائمة حفظ بنوع .

بناء الجملة في البرنامج النصي

هذا هو السيناريو وضع نص ويجب تشغيله في إطار "موجه الأوامر"، وليس من مربع الحوار تشغيل . لفتح إطار موجه الأوامر، انقر فوق ابدأ، ثم انقر فوق تشغيل، نوع
CMD في المربع فتح ، ثم انقر فوق
OK.

سجل الأخطاء وتصدير سيتم حفظ الملفات إلى دليل موجه الأوامر الحالي. يجب أن يكون لديك أذونات لإنشاء ملفات في هذا الدليل. للحصول على تعليمات سطر الأوامر، أدخل الأمر التالي:
CSCRIPT AddSendAs.vbs 
لتصدير المستخدمين الذين لديهم Full Mailbox Access دون إذن Send As لمجال، أدخل الأمر التالي:
CSCRIPT AddSendAs.vbs [domain controller name] –ExportExample:
CSCRIPT AddSendAs.vbs CORP-DC-1 –Export

وسيتم إنشاء ملف تصدير باسم "Send_As_Export_H_MM_SS.txt".

لاستيراد ملف تصدير تم تحريرها، أدخل الأمر التالي:
CSCRIPT AddSendAs.vbs [domain controller name] –Import [filename]

Example:


CSCRIPT AddSendAs.vbs CORP-DC-1 –Import "Send_As_Export_H_MM_SS.txt"

كيفية منح الإذن Send As لكل علبة البريد في المجال لكافة المستخدمين الذين لديهم إذن Full Mailbox Access لعلبة بريد

ملاحظة: إذا كان لديك المفوضين الذين لديهم أيضا إذن Full Mailbox Access في المؤسسة الخاصة بك، يجب عدم استخدام وضع SetAll. في حالة استخدام وضع SetAll في هذه الحالة، سيتم منح المفوضين إذن Send As. يؤدي هذا السلوك إلى كافة رسائل البريد الإلكتروني التي قاموا بإرسالها باستخدام إذن "إرسال ك" بدلاً من إرسالها باسم الإذن. يمكنك تصحيح هذه المشكلة عن طريق إزالة إذن Send As الذي تم منحة عن طريق الخطأ إلى المفوضين:
CSCRIPT AddSendAs.vbs [domain controller name] –SetAll

Example:


CSCRIPT AddSendAs.vbs CORP-DC-1 –SetAll

في حالة استخدام وضع SetAll، سيتم إنشاء ملف تصدير باسم Send_As_Export_H_MM_SS.txt. يجب حفظ هذا الملف لأنه سجل بكافة الحسابات التي تم تغييرها. إذا كنت تريد تشغيل البرنامج النصي مرة أخرى، لن ينتج عنه نفس قائمة الحسابات للحسابات أن الفعل تم منحك الإذن Send As.


سيتم حفظ الأخطاء التي تواجهك أثناء تشغيل البرنامج النصي إلى ملف Send_As_Errors_H_MM_SS.txt. اسم الملف الخطأ ستطابق سيطابق الطابع الزمني لأي ملف تصدير مرتبط.

تعديلات البرامج النصية

قد تكون هناك حسابات في المؤسسة التي تملك أذونات العديد من الكائنات، ولكن لا تريد تغيير الأذونات. لتقليل حجم ملف التصدير، يمكنك تصفية هذه الحسابات من خلال تعديل المتغير FMA_EXCLUSIVE_LIST الموجود قرب الجزء العلوي من البرنامج النصي. يسرد هذا المتغير افتراضياً عدد قليل من الحسابات التي يجب منعها من إخراج البرنامج النصي. يمكنك إضافة عدد أكبر من الحسابات باستخدام التنسيق التالي.
& "<Domain\Name>" & OUTPUT_DELIMITER
على سبيل المثال، يمكنك تغيير قيمة المتغير التالي.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
بحيث يظهر كما يلي.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER & "Mydomain\Service1" & OUTPUT DELIMITER
يمنع هذا التغيير سرد لحساب "Mydomain\Service1" في ملف التصدير إلى جانب "NT AUTHORITY\SELF" و "NT AUTHORITY\SYSTEM." لاحظ أن القيمة domain\name مميزة حساس لحالة الأحرف، ويجب أن تظهر تماما كما هي أو كما ستظهر في ملف التصدير.

وهناك متغير آخر قابل للتحرير، FMA_EXCLUSIVE_EXSVC له القيمة الافتراضية "\Exchange خدمات" & OUTPUT_DELIMITER. "خدمات Exchange" هو اسم حساب يتم منح الأذونات من خلال "Active Directory رابط" في سيناريوهات Exchange Server 5.5 والهجرة والتعايش السلمي في Exchange 2000. يتم إنشاء هذا الحساب في عدة مجالات، وأنه قد يظهر بشكل متكرر في ملف التصدير في حالة عدم منعه.

يقبل متغير FMA_EXCLUSIVE_EXSVC حساب واحد فقط كقيمة لها. اسم الحساب غير حساسة لحالة الأحرف. الحساب الذي يجب أن يبدأ بحرف الخط المائل عكسي (\) ويجب إلا يحتوي على المجال الذي ينتمي إليه الحساب. سوف يتم حظر الحساب لكافة المجالات التي يوجد بها.

إذا كنت قد استخدمت أساليب تزامن الدليل أو أدوات ترحيل طرف ثالث، حساب آخر قد تكون موجودة في عدة مجالات على صناديق بريد المستخدم الأذونات الممنوحة على نطاق واسع. في هذا السيناريو، يمكنك استبدال اسم الحساب "خدمات \Exchange".

تلميحات وتحذيرات

  • لا تتجاهل ملفات سجل الأخطاء والتي يتم إنشاؤها بواسطة البرنامج النصي. وقد تكون مفيدة لاستكشاف الأخطاء وإصلاحها أو لعكس التغييرات لاحقاً. تذكر أن مجرد منحك الإذن Send As لحساب، لن تسجل في ملف التصدير.
  • في حالة تعطيل قاعدة بيانات أو ملقم Exchange، يتم معالجة البرنامج النصي أبطأ. وفي هذه حالة، يمكنك فرز ملف التصدير حسب قاعدة البيانات ونقل البنود المرتبطة بقاعدة بيانات متوقفة إلى ملف مختلف لاستيراده لاحقاً.
  • يمنع البرنامج النصي إخراج الحسابات حيث ينتهي ب "$" اسم تسجيل الدخول أو يكون NT AUTHORITY\SYSTEM. حسابات النظام هذه لا عادة ينبغي إذن Send As، وإزالتها من ملف التصدير إلى حد كبير إلى تقليل حجمه.
  • يجب أن يكون ملف التصدير بتنسيق Unicode قبل أن يمكن استيراد. إذا قمت بدون قصد حفظ الملف كنص ANSI، يمكنك حل هذه المشكلة بتحميل الملف في "المفكرة" وحفظها كنص Unicode.
  • لا يعمل استيراد، استكشاف الأخطاء وإصلاحها باستخدام حسابات تجريبية وسطر واحد في ملف الاستيراد. يجب تكوين حساب اختبار لديه علبة بريد في Exchange server قيد تشغيل، وثم يمكنك منح إذن Full Mailbox Access لحساب اختبار آخر. لا تمنح الإذن Send As لحساب الاختبار الأخرى.
  • لا توجد أي وضع تراجع لهذا البرنامج النصي. لإزالة أذونات Send As التي قمت بمنحها باستخدام هذا البرنامج النصي، يجب تكوين برنامج نصي آخر أو إزالتها يدوياً. لم يتم توفير وضع تراجع تجنب استخدام هذا البرنامج النصي لإزالة أذونات Send As لكافة المستخدمين في مؤسسة.
  • لا يعالج البرنامج النصي حساب الذين تم منحهم "التحكم الكامل" لكائن المستخدم إلى جانب Full Mailbox Access بشكل صحيح. تحكم كامل يتضمن الإذن Send As، ولكن تصدير البرنامج النصي الحساب كما لو لم يكن الإذن Send As. وقد يؤدي زيادة حجم ملف التصدير، ولكن حدوث أي ضرر نتيجة استيراد الملف ومن ثم redundantly منح أذونات Send As لحسابات من هذا القبيل.
  • لا يمكن معالجة حسابات مستخدمي Active directory ذات أسماء مميزة والتي تتضمن علامات تبويب أو علامات اقتباس مزدوجة غير متطابقة باستخدام هذا البرنامج النصي. يمكن معالجة البرنامج النصي بشكل صحيح اسم يحتوي على علامات اقتباس مزدوجة متطابقة كما يلي:
    "CN = الأول" الاسم المستعار "آخر DC = المجال DC = com"
  • يدعم كل إصدار من Excel حد أقصى آخر لخط. للحصول على مزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    لا يمكن استيراد الملفات النصية التي أكبر من 65536 صفاً إلى Excel 97 و Excel 2000 Excel 2002 و Excel 2003 120596

    فيما يلي حدود الصفوف ل Excel 2003 و Excel 2007:
    • Excel 2003:65536 الصفوف
    • Excel 2007: 1.048.576 الصفوف
    إذا كان ملف الإخراج الخاص بك أكبر من هذه الحدود، يجب تقسيم الملف إلى أجزاء قبل تحميله في Excel.
  • يسرد الملف Send_As_Errors حسابات محددة حيث كان هناك فشل في قراءة أو كتابة الأذونات. إذا تمت معالجة حسابات أخرى في المجال بشكل صحيح، هذه الحسابات قد الحصول على شيء مشترك الذي يمنع تشغيل معهم البرنامج النصي. تتضمن المشكلات الشائعة ما يلي:
    • عدم وجود أذونات إدارية لعرض أو تعيين الخصائص في الحسابات.
    • لا يتم تشغيل مخزن علبة بريد Exchange.
    • محطة العمل ليست عضوا في نفس المجال.
    • الحساب الإداري المستخدمة ليست من نفس المجال الأم.
لتشغيل هذا البرنامج النصي، نسخ ولصق كافة الخطوط الفاصلة بين البرنامج النصي لبدء ونهاية البرنامج النصي إلى محرر نص عادي مثل "المفكرة". حفظ البرنامج النصي ك AddSendAs.vbs. بداية البرنامج النصي.
Option Explicit
Dim OUTPUT_DELIMITER
OUTPUT_DELIMITER = """""""" & vbTab & """"""""

'Define exclusive list, if FMA is given to any user in this list, it's ignored. If you
'want to modify this list, please be sure to follow the same format. Every alias has to
'have a OUTPUT_DELIMITER before and after it
Dim FMA_EXCLUSIVE_LIST
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
Dim FMA_EXCLUSIVE_EXSVC
FMA_EXCLUSIVE_EXSVC = "\Exchange Services" & OUTPUT_DELIMITER

'Permission Type: Allow or Deny
const ACCESS_ALLOWED_OBJECT_ACE_TYPE = 5
const ADS_ACETYPE_ACCESS_ALLOWED = &h0
const ADS_ACETYPE_ACCESS_DENIED = &h1

'Flags: Specifies Inheritance
const ADS_ACEFLAG_INHERIT_ACE = &h2
const ADS_ACEFLAG_NO_PROPAGATE_INHERIT_ACE = &h4
const ADS_ACEFLAG_INHERIT_ONLY_ACE = &h8
const ADS_ACEFLAG_INHERITED_ACE = &h10
const ADS_ACEFLAG_VALID_INHERIT_FLAGS = &h1f
const ADS_ACEFLAG_SUCCESSFUL_ACCESS = &h40
const ADS_ACEFLAG_FAILED_ACCESS = &h80

'Declare ADSI constants
Const ADS_OPTION_SECURITY_MASK = 3
Const ADS_OPTION_REFERRALS= 1
Const ADS_SECURITY_INFO_DACL = 4
Const ADS_CHASE_REFERRALS_NEVER = &h00
Const ADS_CHASE_REFERRALS_SUBORDINATE = &h20
Const ADS_CHASE_REFERRALS_EXTERNAL = &h40

'output file name
Const EXPORT_FILE = "Send_As_Export"
Const ERROR_FILE = "Send_As_Errors"

' script mode
const MODE_INVALID = -1
const MODE_SETALL = 0
const MODE_EXPORT = 1
const MODE_IMPORT = 2
const SETALL = "-SETALL"
const EXPORT = "-EXPORT"
const IMPORT = "-IMPORT"

' argument index
Const ARG_INDEX_MODE = 1
Const ARG_INDEX_DC = 0
Const ARG_INDEX_FILENAME = 2

' column index in import/export file
Const COLUMN_INDEX_USERDISPLAYNAME = 0
Const COLUMN_INDEX_FMAALIAS = 1
Const COLUMN_INDEX_FMADISPLAYNAME = 2
Const COLUMN_INDEX_IFPUBLICDELEGATE = 3
Const COLUMN_INDEX_MAILBOXSTATUS = 4
Const COLUMN_INDEX_USERADSPATH = 5
Const COLUMN_INDEX_HOMEMDB = 6

Const EMPTYSTRING = ""
Const STRNO = "No Delegates"
Const STRYES = "Has Delegates"
Const MIN_ARG = 2
Const INIT_ARRAY_SIZE = 100

' Microsoft Exchange
Const EX_MB_SEND_AS_ACCESSMASK = &H00100
Const EX_FULLMailbox_AccessMask = 1
Const MESO = "Microsoft Exchange System Objects"
Const EX_MB_SEND_AS_GUID = "{AB721A54-1E2F-11D0-9819-00AA0040529B}"

Const ForReading= 1
Const ForWriting= 2
Const ForAppending= 8
Const TristateTrue= -1
Const ADS_SCOPE_SUBTREE = 2

Dim objUser
Dim objSDMailBox
Dim objSDNTsecurity
Dim objDACLNTSD
Dim objNewACE

Dim sTrusteeAlias()
Dim sFMADeniedList
Dim sFMAExplicitAllow
Dim fACESendasFound
Dim dArraySize
Dim TotalACE
Dim i
Dim rootDSE
Dim conn
Dim objCommand
Dim objCmdDisplayName
Dim rsUsers
Dim FoundObject
Dim objFSO
Dim objfileImport
Dim objfileExport
Dim objfileError
Dim sImportFilePath
Dim cScriptMode
Dim dArgCount
Dim dArgExpected
Dim sDCServer
Dim sMailboxStatus
Dim sIfPublicDelegate
Dim sFMAUserDisplayName
Dim sExportFileName
Dim sErrorsFileName
Dim msPublicDelegates
Dim fError
Dim fOneError
Dim fFMAAllowed

On Error Resume Next
dArraySize = INIT_ARRAY_SIZE
ReDim Preserve sTrusteeAlias(dArraySize)

dArgCount = Wscript.Arguments.Count
If ( dArgCount < MIN_ARG ) Then
DisplaySyntax
End If

err.Clear
fError = False
fOneError = False
cScriptMode = MODE_INVALID
Select Case UCase(WScript.Arguments(ARG_INDEX_MODE))
Case SETALL
cScriptMode = MODE_SETALL
dArgExpected = ARG_INDEX_MODE + 1
Case EXPORT
cScriptMode = MODE_EXPORT
dArgExpected = ARG_INDEX_MODE + 1
Case IMPORT
cScriptMode = MODE_IMPORT
dArgExpected = ARG_INDEX_FILENAME + 1
Case Else
cScriptMode = MODE_INVALID
End Select
If (cScriptMode = MODE_INVALID Or dArgCount <> dArgExpected) Then
DisplaySyntax
End If

sDCServer = WScript.Arguments(ARG_INDEX_DC)

CreateOutputFiles

If ( cScriptMode = MODE_SETALL Or cScriptMode = MODE_EXPORT ) Then
Dim sDomainContainer
If (cScriptMode = MODE_SETALL) Then
Dim strInput
WScript.StdOut.WriteLine("WARNING: If you continue, each account in the domain that has")
WScript.StdOut.WriteLine("Full Mailbox Access permission for a given mailbox will also be")
WScript.StdOut.WriteLine("granted permission to Send As the mailbox owner.")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("To preview the list of mailboxes before granting Send As,")
WScript.StdOut.WriteLine("cancel this operation and use the -Export mode of this script.")
WScript.StdOut.WriteLine()
WScript.StdOut.Write("Press Y to continue or any other key to cancel: ")
strInput = WScript.StdIn.ReadLine()
If (UCase(strInput) <> UCase("Y")) Then
WScript.Quit
End If
End If

WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("""!"" indicates an error processing an object.")
WScript.StdOut.WriteLine(" Check " & sErrorsFilename)
WScript.StdOut.WriteLine("Starting...")
WScript.StdOut.WriteLine()

err.Clear
Set rootDSE = GetObject("LDAP://" & sDCServer & "/RootDSE")
sDomainContainer = rootDSE.Get("defaultNamingContext")
WScript.StdOut.WriteLine("Finding domain controller [ " & sDCServer & " ] for domain [ " & sDomainContainer & " ]")

If (err.number <> 0) Then
WScript.StdOut.WriteLine("Failed to find the domain or domain controller, error:" & err.Description)
objfileError.WriteLine("Failed to find the domain or domain controller, error:" & err.Description)
WScript.Quit
End If

err.Clear
Set conn = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
If (err.number <> 0) Then
WScript.StdOut.WriteLine("Failed to bind to Active Directory server, error:" & err.Description)
objfileError.WriteLine("Failed to bind to Active Directory server, error:" & err.Description)
WScript.Quit
End If

Set objCommand.ActiveConnection = conn
WScript.StdOut.WriteLine("Searching for mailbox owner user accounts in " & sDomainContainer)

objCommand.CommandText = "<LDAP://" & sDCServer & "/" & sDomainContainer & ">;(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)(msExchHomeServerName=*)) ))));adspath;subtree"
objCommand.Properties("searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Chase referrals") = (ADS_CHASE_REFERRALS_SUBORDINATE Or ADS_CHASE_REFERRALS_EXTERNAL)

err.Clear
Set rsUsers = objCommand.Execute
If (err.number <> 0) Then
WScript.StdOut.WriteLine("Search for mailbox owners failed, error:" & err.Description)
objfileError.WriteLine("Search for mailbox owners failed, error:" & err.Description)
WScript.Quit
End If

If (rsUsers.RecordCount = 0) Then
WScript.StdOut.WriteLine("No mailbox owner user accounts could be seen in " & sDomainContainer & ".")
objfileError.WriteLine("No mailbox owner user accounts found in " & sDomainContainer & ".")
fError = True
End If

While Not rsUsers.EOF
If (fOneError = True) Then
WScript.StdOut.Write("!")
Else
WScript.StdOut.Write(".")
End If
fOneError = False

'Skip any mailbox object in Microsoft Exchange System Objects container
If (0 = Instr(rsUsers.Fields(0).Value, MESO)) Then
err.Clear
Set objUser = GetObject(rsUsers.Fields(0).Value)
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get user object: " & rsUsers.Fields(0).Value)
objfileError.WriteLine("Error: " & err.Description)
fError = True
fOneError = True
err.Clear
End If
Set objSDMailBox = objUser.MailboxRights
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get mailbox rights: " & rsUsers.Fields(0).Value)
objfileError.WriteLine("Error: " & err.Description)
fError = True
fOneError = True
err.Clear
End If
Set objSDNTsecurity = objUser.ntSecurityDescriptor
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get NTSD: " & rsUsers.Fields(0).Value)
objfileError.WriteLine("Error: " & err.Description)
fError = True
fOneError = True
err.Clear
End If

Set objDACLNTSD = Nothing
If (objUser.AccountDisabled) Then
sMailboxStatus = "Disabled"
Else
sMailboxStatus = "Enabled"
End If

'Query this user's publicDelegates list
err.Clear
msPublicDelegates = objUser.Get("publicDelegates")
If (err.number <> 0) Then
'This user doesn't have publicDelegates list set
sIfPublicDelegate = STRNO
err.Clear
Else
sIfPublicDelegate = STRYES
End If

err.Clear
FindAllFMAUsers objSDMailBox

If (TotalACE > dArraySize) Then
'Needs to allocate bigger size array
dArraySize = TotalACE + 1
ReDim Preserve sTrusteeAlias(dArraySize)
FindAllFMAUsers objSDMailBox
End If
If (err.number <> 0) Then
objfileError.WriteLine("Failed to query mailbox rights of user: " & rsUsers.Fields(0).Value)
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fError = True
fOneError = True
End If

If TotalACE > 0 Then
Set objDACLNTSD = objSDNTsecurity.DiscretionaryAcl

For i = 0 to TotalACE - 1 Step 1

'Check if we already have Send As ACE in NT security descriptor
'If it exists, either allow or deny, we don't need to add send as to it
CheckSendAsACE objDACLNTSD, sTrusteeAlias(i)

'Note: deny entries take precedence over allow entries.
'If there is FMA deny ACE, skip it even if we find FMA allow ACE
IfFMAAllowed(sTrusteeAlias(i) & OUTPUT_DELIMITER)
If ((fFMAAllowed = True) And (fACESendasFound = 0)) Then
If cScriptMode = MODE_SETALL Then
Set objNewACE = CreateObject ("AccessControlEntry")
objNewACE.AceFlags = 0
objNewACE.AceType = ACCESS_ALLOWED_OBJECT_ACE_TYPE
objNewACE.AccessMask = EX_MB_SEND_AS_ACCESSMASK
objNewACE.Flags = 1
objNewACE.ObjectType = EX_MB_SEND_AS_GUID
objNewACE.Trustee = sTrusteeAlias(i)

objDACLNTSD.AddAce objNewAce
End If

'Query trustee(FMA user) to get its displayName
Dim rsTrustee
Dim objTrustee
Dim dPosition
Dim sAlias

dPosition = inStr(1, sTrusteeAlias(i), "\")
sAlias = mid(sTrusteeAlias(i), dPosition + 1)

Set objCmdDisplayName = CreateObject("ADODB.Command")
Set objCmdDisplayName.ActiveConnection = conn
objCmdDisplayName.CommandText = "<LDAP://" & sDomainContainer & ">;(&(&(& (mailnickname=" & sAlias & ") (| (&(objectCategory=person)(objectClass=user)(msExchHomeServerName=*)) ))));adspath;subtree"
objCmdDisplayName.Properties("searchscope") = ADS_SCOPE_SUBTREE
objCmdDisplayName.Properties("Page Size") = 100
objCmdDisplayName.Properties("Timeout") = 30
objCmdDisplayName.Properties("Chase referrals") = (ADS_CHASE_REFERRALS_SUBORDINATE Or ADS_CHASE_REFERRALS_EXTERNAL)

Set rsTrustee = objCmdDisplayName.Execute
Set objTrustee = GetObject(rsTrustee.Fields(0).Value)

If (err.number <> 0) Then
'Failed to query FMA user's display name, use its alias
sFMAUserDisplayName = sAlias
Else
sFMAUserDisplayName = objTrustee.displayName
End If

'output to export file
err.Clear
objfileExport.WriteLine ("""""""" & objUser.displayName & OUTPUT_DELIMITER & sTrusteeAlias(i) & OUTPUT_DELIMITER & sFMAUserDisplayName & OUTPUT_DELIMITER & sIfPublicDelegate & OUTPUT_DELIMITER & sMailboxStatus & OUTPUT_DELIMITER & rsUsers.Fields(0).Value & OUTPUT_DELIMITER & objUser.homeMDB & """""""")
If (err.number <> 0) Then
objfileError.WriteLine("User " & rsUsers.Fields(0).Value & " could not be added to the export file. You should set permissions manually for this user.")
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fError = True
fOneError = True
End If
Set objCmdDisplayName = Nothing
Set rsTrustee = Nothing
Set objTrustee = Nothing
End If
Next

If cScriptMode = MODE_SETALL Then
err.Clear
objSDNTsecurity.DiscretionaryAcl = objDACLNTSD
objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
objUser.SetInfo
If (err.number <> 0) Then
objfileError.WriteLine("Failed to update ADSI for user: " & rsUsers.Fields(0).Value)
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fError = True
fOneError = True
End If
End If

TotalACE = 0
Set objSDMailbox = Nothing
Set objSDNTsecurity = Nothing
Set objUser = Nothing
Set objDACLNTSD = Nothing
End If

End If
rsUsers.MoveNext
Wend
End If

If (cScriptMode = MODE_IMPORT) Then
Dim sOneRow
Dim sArraySplit
Dim objUserItem
Dim UserPath
Dim objUserSD
Dim objUserDACL
Dim fNeedToAddSendAs

sImportFilePath = WScript.Arguments(ARG_INDEX_FILENAME)

WScript.StdOut.WriteLine("If you continue, each account listed in " & sImportFilePath)
WScript.StdOut.WriteLine("that has Full Mailbox Access permission for a given mailbox")
WScript.StdOut.WriteLine("will also be granted permission to Send As the mailbox owner.")
WScript.StdOut.WriteLine()
WScript.StdOut.Write("Press Y to continue or any other key to cancel: ")
strInput = WScript.StdIn.ReadLine()
If (UCase(strInput) <> UCase("Y")) Then
WScript.Quit
End If
WScript.StdOut.WriteLine("Starting...")
WScript.StdOut.WriteLine()

UserPath = EMPTYSTRING
err.Clear
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objfileImport = objFSO.OpenTextFile(sImportFilePath, ForReading, False, TristateTrue)
If (err.number <> 0) Then
WScript.StdOut.WriteLine("Failed to open import file " & sImportFilePath & ", error:" & err.Description)
objfileError.WriteLine("Failed to open import file " & sImportFilePath & ", error:" & err.Description)
WScript.Quit
End If

fNeedToAddSendAs = False
Do While objfileImport.AtEndOfStream <> True
If (fOneError = True) Then
WScript.StdOut.Write("!")
Else
WScript.StdOut.Write(".")
End If
fOneError = False

err.Clear
sOneRow = objfileImport.ReadLine
sArraySplit = Split(sOneRow , OUTPUT_DELIMITER)
If (err.number <> 0) Then
objfileError.WriteLine("Failed to parse one row: " & sOneRow )
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fError = True
fOneError = True
End If

If (UserPath <> sArraySplit(COLUMN_INDEX_USERADSPATH)) Then
'A new user
If (fNeedToAddSendAs = True ) Then
'update existing user
err.Clear
objSDNTsecurity.DiscretionaryAcl = objDACLNTSD
objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
objUser.SetInfo
If (err.number <> 0) Then
objfileError.WriteLine("Failed to update permissions for user: " & UserPath)
objfileError.WriteLine("Error: " & err.Description)
fError = True
fOneError = True
End If
End If

fNeedToAddSendAs = False
Set objUser = Nothing
Set objSDNTsecurity = Nothing
Set objDACLNTSD = Nothing

UserPath = sArraySplit(COLUMN_INDEX_USERADSPATH)
err.Clear
Set objUser = GetObject(UserPath)
Set objSDNTsecurity = objUser.ntSecurityDescriptor
Set objDACLNTSD = objSDNTsecurity.DiscretionaryACL
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get user object: " & UserPath)
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fError = True
fOneError = True
End If
End If

'Add newACE Do we need this check?
CheckSendAsACE objDACLNTSD, sArraySplit(COLUMN_INDEX_FMAALIAS)
If (fACESendasFound = 0) Then
Set objNewACE = CreateObject ("AccessControlEntry")
objNewACE.AceFlags = 0
objNewACE.AceType = ACCESS_ALLOWED_OBJECT_ACE_TYPE
objNewACE.AccessMask = EX_MB_SEND_AS_ACCESSMASK
objNewACE.Flags = 1
objNewACE.ObjectType = EX_MB_SEND_AS_GUID
objNewACE.Trustee = sArraySplit(COLUMN_INDEX_FMAALIAS)

objDACLNTSD.AddAce objNewACE
fNeedToAddSendAs = True
End If
Loop

If (fNeedToAddSendAs = True ) Then
'update the last user
err.Clear
objSDNTsecurity.DiscretionaryAcl = objDACLNTSD
objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
objUser.SetInfo
If (err.number <> 0) Then
objfileError.WriteLine("Failed to update permissions for user: " & UserPath)
objfileError.WriteLine("Error: " & err.Description)
fError = True
End If
End If

End If

objFSO.Close
objfileImport.Close
objfileExport.Close
objfileError.Close

Set objFSO = Nothing
Set objfileImport = Nothing
Set objfileExport = Nothing
Set objfileError = Nothing
Set objCommand = Nothing
Set conn = Nothing

WScript.StdOut.WriteLine()
If (fError = True) Then
WScript.StdOut.WriteLine("Finished with one or more errors. See " & sErrorsFilename)
Else
WScript.StdOut.WriteLine("Finished successfully. No errors were encountered.")
End If

Function FindAllFMAUsers (objSD)
Dim objACL
Dim objACE
Dim intACECount
Dim strIndent
Dim dAccessMaskBit
Dim dPosition
Dim sUserAlreadyFound

On Error Resume Next
err.Clear
TotalACE = 0
sFMADeniedList = EMPTYSTRING
sFMAExplicitAllow = EMPTYSTRING
sUserAlreadyFound = OUTPUT_DELIMITER
intACECount = 0
Set objACL = objSD.DiscretionaryAcl
intACECount = objACL.AceCount

If intACECount Then
' Open discretionary ACL (DACL) data.
For Each objACE In objACL

dPosition = inStr(1, objACE.Trustee, "$")
If ((0 = Instr(UCase(objACE.Trustee & OUTPUT_DELIMITER), UCase(FMA_EXCLUSIVE_EXSVC))) And (0 = Instr(sUserAlreadyFound, OUTPUT_DELIMITER & objACE.Trustee & OUTPUT_DELIMITER)) And (0 = Instr(FMA_EXCLUSIVE_LIST, OUTPUT_DELIMITER & objACE.Trustee & OUTPUT_DELIMITER)) And (dPosition <> Len(objACE.Trustee)) And ((objACE.AccessMask And EX_FULLMailbox_AccessMask) <>0) And ((objACE.AceType = ADS_ACETYPE_ACCESS_ALLOWED) Or (objACE.AceType = ACCESS_ALLOWED_OBJECT_ACE_TYPE) )) Then
If (TotalACE < dArraySize) Then
sTrusteeAlias(TotalACE) = objACE.Trustee
sUserAlreadyFound = sUserAlreadyFound & objACE.Trustee & OUTPUT_DELIMITER
End If
TotalACE = TotalACE + 1
If ((objACE.AceFlags And ADS_ACEFLAG_INHERITED_ACE) = 0) Then
'Keep a list who explictly set FMA at mailbox level
sFMAExplicitAllow = sFMAExplicitAllow & objACE.Trustee & OUTPUT_DELIMITER
End If
ElseIf (( (objACE.AccessMask And EX_FULLMailbox_AccessMask) <>0 ) And (objACE.AceType = ADS_ACETYPE_ACCESS_DENIED)) Then
'Keep a list who denied FMA, use OUTPUT_DELIMITER as demiliter,
'include both inherited and explicit set at mailbox level
sFMADeniedList = sFMADeniedList & objACE.Trustee & OUTPUT_DELIMITER
End If
Next
End If

Set objACL = Nothing
End Function

Function CheckSendAsACE (objDiscretionaryACL, sTAlias)
Dim objACE
Dim intACECount

err.Clear
fACESendasFound = 0
intACECount = objDiscretionaryACL.AceCount

If intACECount Then
For Each objACE In objDiscretionaryACL
err.Clear
If ( (objACE.Trustee = sTAlias) And (objACE.ObjectType = EX_MB_SEND_AS_GUID) ) Then
fACESendasFound = 1
End If
If (err.number <> 0) Then
objfileError.WriteLine("Could not read permissions for this user: " & sTAlias)
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fError = True
fOneError = True
End If
Next
End If
End Function

Function IfFMAAllowed(sTrustee)
'FMA allow ACE has been found. Assume it's true
fFMAAllowed = True

If ( (0 <> Instr(sFMADeniedList, sTrustee)) And (0 = Instr(sFMAExplicitAllow, sTrustee))) Then
'If Denied ACE is found, and no explicit allow FMA
fFMAAllowed = False
End If
End Function

Function CreateOutputFiles
Dim sTimeArray
Dim sTimeShort
Dim sTime

err.Clear
sTime = Time
sTimeShort = Split(sTime, " ")
sTimeArray = Split(sTimeShort(0), ":")

Set objFSO = CreateObject("Scripting.FileSystemObject")
sErrorsFileName = ERROR_FILE & "_" & sTimeArray(0) & "_" & sTimeArray(1) & "_" & sTimeArray(2) & ".txt"
Set objfileError = objFSO.OpenTextFile(sErrorsFileName, ForWriting, True, TristateTrue)

If (cScriptMode = MODE_SETALL Or cScriptMode = MODE_EXPORT)Then
sExportFileName = EXPORT_FILE & "_" & sTimeArray(0) & "_" & sTimeArray(1) & "_" & sTimeArray(2) & ".txt"
Set objfileExport = objFSO.OpenTextFile(sExportFileName, ForWriting, True, TristateTrue)
End If

If err.number <> 0 Then
WScript.StdOut.WriteLine("Unable to create export or error files: " & err.Description)
objfileError.WriteLine("Unable to create export or error files: " & err.Description)
fError = True
fOneError = True
WScript.Quit
End If

End Function

Function DisplaySyntax
WScript.StdOut.WriteLine("Syntax:")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Export accounts with Full Mailbox Access that do not have Send As permission:")
WScript.StdOut.WriteLine(" CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -Export")
WScript.StdOut.WriteLine(" NOTE: The list will be saved to Send_As_Export_HH_MM_SS.txt")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Grant Send As to all accounts listed in an export file:")
WScript.StdOut.WriteLine(" CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -Import ""filename.txt""")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Grant Send As to all accounts in the domain with Full Mailbox Access:")
WScript.StdOut.WriteLine(" CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -SetAll")
WScript.StdOut.WriteLine(" NOTE: Accounts will be listed in Send_As_Export_HH_MM_SS.txt")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("For all modes, errors are saved to Send_As_Errors_HH_MM_SS.txt")

WScript.Quit
End Function
نهاية البرنامج النصي

تقدم Microsoft أمثلة برمجية للتوضيح فقط، دون أي ضمان صريح أو ضمني. هذا يتضمن، على سبيل المثال لا الحصر، الضمانات الضمنية الخاصة بالتسويق أو الملاءمة لغرض معين. تفترض هذه المقالة أنك معتاد على لغة البرمجة التي يتم شرحها والأدوات المستخدمة لإنشاء الإجراءات وتصحيحها. يساعد مهندسو الدعم لدى Microsoft شرح وظيفة إجراء محدد. ومع ذلك، لن يقوموا بتعديل هذه الأمثلة لتقديم وظيفة إضافية أو إنشاء إجراءات تستوفي متطلبات محددة.

لمزيد من المعلومات حول خيارات الدعم المتوفرة من Microsoft، الرجاء زيارة موقع Microsoft التالي على الويب:منتجات الجهات الأخرى المذكورة في هذه المقالة تابعة لشركات مستقلة عن Microsoft. لا تقدم Microsoft أي ضمان، سواء ضمنياً أو صريحا، بخصوص أداء هذه المنتجات أو كفاءتها.
خصائص

رقم الموضوع: 912918 - آخر مراجعة: 15‏/01‏/2017 - المراجعة: 1

تعليقات