ผู้ใช้ไม่สามารถส่งข้อความอีเมลจากอุปกรณ์แบบพกพาหรือจากกล่องจดหมายที่มีการใช้งานร่วมกันใน Exchange 2000 Server และใน Exchange Server 2003

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 912918 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

เมื่อคุณพยายามที่จะส่งข้อความอีเมล ใน เซิร์ฟเวอร์ Microsoft Exchange 2000 หรือ Microsoft Exchange Server 2003 คุณไม่สามารถส่งข้อความอีเมล นอกจากนี้ คุณอาจได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้อย่างใดอย่างหนึ่งหรือรายงานไม่ได้จัดส่งต่อไปนี้ (ndr) อย่างใดอย่างหนึ่ง

ข้อผิดพลาด

  • การเข้าถึงถูกปฏิเสธ
  • คุณไม่มีสิทธิ์เพียงพอสำหรับการดำเนินการนี้กับวัตถุนี้ ดูโฟลเดอร์ที่ติดต่อหรือผู้ดูแลระบบของคุณ
  • ข้อความ unlisted ข้อผิดพลาด
  • mapi_e_no_access-2147024891
  • ไม่สามารถส่งข้อความจดหมายสำหรับผู้ใช้รายชื่อผู้ใช้ (HRESULT: -2147024891) ผู้ใช้ Pausing ชื่อผู้ใช้ (ข้อผิดพลาดในการรักษาความปลอดภัย - ไม่สามารถเข้าถึงกล่องจดหมายของผู้ใช้ได้)
  • ทรัพยากรที่ไม่พบ
หมายเหตุ:คุณได้รับข้อความแสดงข้อผิดพลาดของ "การเข้าถึงถูกปฏิเสธ" หรือเกิดข้อผิดพลาด "ไม่พบทรัพยากร" จาก Microsoft Outlook Web Access เมื่อคุณเข้าสู่ระบบในบัญชีผู้ใช้ผู้รับมอบสิทธิ์

ndr

  • คุณไม่มีสิทธิ์ในการส่งไปยังผู้รับคนนี้ สำหรับความช่วยเหลือ ติดต่อผู้ดูแลระบบของคุณ
  • ไม่สามารถส่งข้อความ โดยใช้กล่องจดหมายของคุณ คุณไม่มีสิทธิ์ในการส่งข้อความในนามของผู้ใช้ที่ระบุ

ผลิตภัณฑ์ที่ได้รับผลกระทบ

ปัญหานี้เรียกว่าจะมีผลกับผลิตภัณฑ์ของบริษัทอื่นต่อไปนี้:
  • การวิจัยในเซิร์ฟเวอร์ BlackBerry องค์กรการเคลื่อนไหว (RIM) (BES)
  • ไร้ดีเทคโนโลยี GoodLink สายการส่งข้อความ
ปัญหานี้อาจยังผลต่อการกำหนดเอง MAPI หรือข้อมูลร่วมกัน CDO วัตถุโดยใช้โปรแกรมที่ส่งข้อความอีเมล

ผลิตภัณฑ์อื่น ๆ ของบริษัทอื่นที่ใช้บัญชีบริการส่งข้อความอีเมล์อาจจะได้รับผลกระทบ ถ้าคุณกำลังใช้ผลิตภัณฑ์ของบริษัทอื่นที่ได้รับผลกระทบจากปัญหานี้ เราขอแนะนำให้ คุณติดต่อผู้ขายสำหรับความช่วยเหลือเกี่ยวกับการแก้ไขปัญหานี้

อย่างไรก็ตาม ได้มีการยืนยันว่า ผลิตภัณฑ์ของบริษัทอื่นต่อไปนี้ได้รับผลจากปัญหานี้ไม่:
  • Unity cisco ภาพการส่งข้อความ
  • ชุดการโยกย้าย quest สำหรับการแลกเปลี่ยน
  • โปรแกรมอรรถประโยชน์ ExMerge Microsoft สำหรับการแลกเปลี่ยน

สาเหตุ

ปัญหานี้อาจเกิดขึ้นได้หากเงื่อนไขใดๆ ต่อไปนี้เป็นจริง::
  • คุณไม่มีสิทธิ์ในการส่งข้อความอีเมล์ที่เป็นเจ้าของกล่องจดหมายในบัญชีคุณกำลังใช้เพื่อส่งข้อความอีเมล
  • คุณกำลังเรียกใช้ Microsoft Exchange 2000 Server Service Pack 3 (SP3) พร้อมกับรุ่นของแฟ้มเป็น Store.exe ซึ่งเท่ากับ หรือหลังจากรุ่น 6619.4 รุ่น 6619.4 ก่อนทำการมีอยู่ในบทความฐานความรู้ของ Microsoft ต่อไปนี้:
    915358โปรแกรมแก้ไขด่วนมีพร้อมใช้งานการเปลี่ยนแปลงลักษณะการทำงานของสิทธิ์การเข้าถึงกล่องจดหมายทั้งหมดใน 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” permission behavior change in Exchange 2003
    This change is not included with Exchange Server 2003 SP2. If you have been running the Exchange Server 2003 SP1 version of the Store.exe file that includes this change, and you upgrade to Exchange Server 2003 SP2, you must install the SP2 version of this hotfix to retain the new behavior. This change will be included in Microsoft Exchange Server 2003 SP3.

SECURITY CONCERNS

Before the Store.exe file versions that are listed in the "Cause" section, granting the Full Mailbox Access permission implicitly granted permission to send as the mailbox owner. This meant that another account that has the Full Mailbox Access permission could send e-mail messages that appeared as if they were sent by the mailbox owner.

Many Microsoft Exchange customers have requested that the Send As permission be separated from the Full Mailbox Access permission for the following two reasons:
  • To deter e-mail spoofing.
  • To make sure that e-mail messages that are sent by a delegate can always be clearly distinguished from e-mail messages that are sent by the actual mailbox owner.
All new versions of the Exchange store will now explicitly require the Send As permission to send e-mail messages as the mailbox owner. However, the following lists the three exceptions to this requirement:
  • The mailbox owner account does not require explicit Send As permissions for its own mailbox.
  • The Associated External Account for a mailbox does not require explicit Send As permissions.
  • A delegate account that also has the Full Mailbox Access permission does not require explicit Send As permissions.
For more information about these exceptions, see the "More Information" section.

การแก้ไข

All accounts that are granted partial or full access to a mailbox, except those mentioned in the "Cause" section, must now be explicitly granted the Send As permission for the mailbox owner account in order to send mail as the mailbox owner. This includes application service accounts that perform functions such as sending e-mail messages for mobile device users.

The Send As permission applies to the identity of an Active Directory user object, not to mailbox contents that are stored in a database. Therefore, the Send As permission must be granted to the service account on each user object that owns a mailbox. When e-mail messages are sent, they are not sent from a particular mailbox or database, but from a user. The user may be the mailbox owner or any other account that has the Send As permission.

You cannot grant the Send As permission on a server that is running Exchange Server or on a database object and achieve the effect of granting the Send As permission for all mailboxes in the database. Granting the Send As permission on an Exchange database object gives you permission to the database itself. The permission is inherited by all mailboxes in the database. However, it does not give you permission to the users who have Send As permissions and who have mailboxes in the database.

หมายเหตุ:Granting the Receive As permission on an Exchange database is the functional equivalent of granting the Full Mailbox Access permission to all mailboxes in the database. This differs from the behavior of the Send As permission.

How to grant the Send As permissions for one account

To explicitly grant another account permission to send as a mailbox owner, follow these steps:
  1. Start the Active Directory Users and Computers management console.
  2. ในการมุมมองmenu, make sure that theคุณลักษณะขั้นสูงเลือกตัวเลือก If this option is not selected, the Security page will not be visible for User account objects.
  3. Open the properties of the user account that owns the mailbox.
  4. คลิกการการรักษาความปลอดภัยแท็บ
  5. If the account is not already in the list of group or user names, add the account that should have the Send As permission for this user.
  6. ในการPermissions:กล่อง คลิกการAllow for the "Send As"permission for the appropriate account.
  7. คลิกตกลง.
  8. Restart the Microsoft Exchange Information Store service on the affected Exchange server.
หมายเหตุ:If you do not restart the Microsoft Exchange Information Store service, the Microsoft Exchange Information Store service will update its permissions cache to make the new permissions take effect according to the value that is set in the following registry subkey:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem

Value name: Mailbox Cache Age Limit
ค่าชนิด: REG_DWORD
Radix: Decimal
ข้อมูลค่า::The mailbox information cache age limit in minutes.
The default value for this registry entry is 120 minutes (two hours). If you modify this registry entry, you must restart the Microsoft Exchange Information Store service.

หมายเหตุ:If you set the time-out values to a very low value, you may affect the performance of the server.

How to grant the Send As permission for multiple accounts

สคริปต์ตัวอย่างนี้ให้ไว้ในตอนท้ายของบทความนี้จะค้นหามีโดเมนของบริการไดเรกทอรีที่ใช้งานอยู่สำหรับบัญชีที่มีสิทธิ์ในการเข้าถึงกล่องจดหมายทั้งหมด โดยไม่มีการส่งเป็นสิทธิ์สำหรับกล่องจดหมาย นี่คือลักษณะของบัญชีบริการหรือทรัพยากรที่จะได้รับผลจากการเปลี่ยนแปลงการรักษาความปลอดภัยนี้ สคริปต์สามารถสร้างแฟ้มการส่งออกที่คุณสามารถตรวจทาน แก้ไข และนำเข้าอีกครั้งเพื่อให้สิทธิ์ส่งเป็นบัญชีที่ต้องให้สิทธิ์นี้แล้ว

คุณยังสามารถให้สิทธิ์ในการส่งเป็นตามสิ่งที่สืบทอดบนวัตถุผู้ใช้ทั้งหมด ในโดเมน Active Directory หรือเป็นคอนเทนเนอร์ ถ้าคุณอนุญาตให้สิทธิ์ในการส่งเป็น ด้วยวิธีการนี้ คุณอาจให้สิทธิ์สำหรับวัตถุที่คุณไม่ได้ตั้งใจ นอกจากนี้ คุณอาจสูญเสียสิทธิ์สำหรับออบเจ็กต์ที่เคลื่อนย้ายจากคอนเทนเนอร์ ดังนั้น วิธีการนี้ไม่ต้องการ และอาจเกี่ยวข้องด้านการรักษาความปลอดภัยที่ควรอย่างรอบคอบพิจารณาก่อนที่คุณนำมาใช้

ถ้าคุณอนุญาตให้ส่งเป็นการอนุญาต โดยใช้วิธีนี้ บัญชีที่มีการส่งเป็นสิทธิ์ที่สืบทอดจะกลาย invisible กับสคริปต์ที่อ้างถึงส่วนท้ายของบทความ การประมวลผลบัญชีเหล่านี้ โดยใช้สคริปต์ ณวันที่ในภายหลัง คุณต้องเอาสิทธิ์ในการเข้าส่งเป็นสืบทอดมาก่อน

เมื่อต้องการให้สิทธิการส่งเป็นสิทธิ์สำหรับบัญชีบนบัญชีผู้ใช้ทั้งหมดในโดเมน Active Directory หรือคอนเทนเนอร์เดียว โดยใช้สิ่งที่สืบทอด ดำเนินการดังต่อไปนี้:
  1. เริ่มคอนโซลการจัดการผู้ใช้ของไดเรกทอรีที่ใช้งานอยู่และคอมพิวเตอร์
  2. ในการมุมมองเมนู ตรวจสอบให้แน่ใจว่าการคุณลักษณะขั้นสูงเลือกตัวเลือก ถ้าไม่ได้เลือกตัวเลือกนี้ หน้าที่การรักษาความปลอดภัยจะไม่ปรากฏสำหรับโดเมนและคอนเทนเนอร์วัตถุ
  3. เปิดคุณสมบัติของโดเมนหรือคอนเทนเนอร์ และจากนั้น คลิกหน้าการรักษาความปลอดภัย
  4. คลิกขั้นสูง.
  5. ถ้าบัญชีผู้ใช้ที่ต้องการอนุญาตจากไม่มีอยู่แล้วอยู่ คลิกaddแล้ว เลือกบัญชีผู้ใช้ ดับมิฉะนั้น เบิลคลิกที่บัญชีสำหรับการแก้ไข
  6. ในการนำไปใช้กับรายการ คลิกวัตถุผู้ใช้.
  7. อนุญาตการส่งเป็นการอนุญาตของบัญชี
  8. คลิกตกลงจนกระทั่งคุณได้ exited และบันทึกการเปลี่ยนแปลงทั้งหมด

กฎพิเศษสำหรับ adminSDHolder บัญชีที่มีป้องกัน

ถ้าคุณใช้สคริปต์การให้สิทธิการส่งเป็นสิทธิ์สำหรับเจ้าของกล่องจดหมายที่ยังเป็นผู้ดูแลโดเมน ส่งเป็นสิทธิ์จะไม่มีผลบังคับใช้ เราขอแนะนำเปิดการใช้ที่ คุณไม่กล่องจดหมายงานบัญชีผู้ใช้ที่ได้รับสิทธิ์ของผู้ดูแลโดเมน หรือที่มี adminSDHolder ที่ได้รับการป้องกัน

กระบวนการadminSDHolderวัตถุเป็นแม่แบบสำหรับบัญชีที่มีสิทธิ์ในการดูแลของ Active Directory อย่างกว้าง เพื่อป้องกันการยกระดับสิทธิ์เกินของ privileges บัญชีที่ได้รับการป้องกันโดยการadminSDHolderวัตถุต้องมีสิทธิ์ที่ตรงกับที่อยู่ในนั้นadminSDHolderวัตถุตัวเอง

ถ้าคุณเปลี่ยนสิทธิหรือสิทธิในการadminSDHolderวัตถุสำหรับบัญชีได้รับการป้องกัน งานพื้นหลังจะเลิกทำการเปลี่ยนแปลงภายในหลายนาที ยกตัวอย่างเช่น ถ้าคุณอนุญาตการส่งเป็นสิทธิ์บนวัตถุผู้ดูแลโดเมนสำหรับบัญชีผู้ใช้การบริการโปรแกรมประยุกต์ งานพื้นหลังจะอัตโนมัติเลิกสิทธิ์

ดังนั้น คุณไม่อนุญาตการส่งเป็นสิทธิ์การใช้บัญชีบริการแอพลิเคชันสำหรับบัญชีผู้ใช้ที่ได้รับการป้องกันโดยการadminSDHolderวัตถุเว้นแต่ว่าคุณได้เปลี่ยนแปลงนั้นadminSDHolderวัตถุตัวเอง ถ้าคุณเปลี่ยนแปลงนั้นadminSDHolderต้องการเปลี่ยนแปลงวัตถุ สิทธิ์การเข้าถึงสำหรับบัญชีทั้งหมดที่ได้รับการป้องกัน คุณควรเปลี่ยนแปลงเฉพาะadminSDHolderวัตถุหลังจากการตรวจทานที่สมบูรณ์ของเกี่ยวข้องด้านความปลอดภัยที่อาจเกิดขึ้นกับการเปลี่ยนแปลง

การเชื่อมโยงกล่องจดหมายที่ มีบัญชีผู้ใช้ที่ได้รับการป้องกันโดยการadminSDHolderวัตถุ ทำตามขั้นตอนเหล่านี้:
  1. เริ่มคอนโซลการจัดการผู้ใช้ของไดเรกทอรีที่ใช้งานอยู่และคอมพิวเตอร์
  2. ในการมุมมองเมนู ตรวจสอบให้แน่ใจว่าการคุณลักษณะขั้นสูงเลือกตัวเลือก ถ้าไม่ได้เลือกตัวเลือกนี้ หน้าที่การรักษาความปลอดภัยจะไม่ปรากฏสำหรับออบเจ็กต์ที่บัญชีผู้ใช้
  3. สร้างบัญชีผู้ใช้ทั่วไปที่ทำหน้าที่เป็นเจ้าของกล่องจดหมาย
  4. กำหนดบัญชีผู้ใช้ที่ธรรมดากล่องจดหมายในการแลกเปลี่ยนเซิร์ฟเวอร์
  5. เปิดคุณสมบัติของเจ้าของบัญชีใหม่ของกล่องจดหมาย
  6. ในการการแลกเปลี่ยนขั้นสูงกล่อง ให้สิทธิ์ในการเข้าถึงกล่องจดหมายทั้งหมดไปยังบัญชีผู้ดูแลที่ได้รับการป้องกัน
  7. ในหน้าการรักษาความปลอดภัย ให้สิทธิการส่งเป็นสิทธิ์ให้กับบัญชีผู้ดูแลที่ได้รับการป้องกัน
  8. คลิกตกลงเมื่อต้องการออกจากคุณสมบัติของวัตถุของเจ้าของกล่องจดหมาย
  9. คลิกขวาวัตถุบัญชีเจ้าของกล่องจดหมาย และจากนั้น คลิกปิดการใช้งานบัญชีการปิดบัญชีสำหรับ logons ทั้งหมด
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับป้องกันการ adminSDHolder บัญชี คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
907434"ส่งเป็น" ขวาถูกเอาออกจากวัตถุที่ผู้ใช้หลังจากที่คุณได้กำหนดค่า "ส่งเป็น" ขวาในผู้ใช้ของไดเรกทอรีที่ใช้งานอยู่และคอมพิวเตอร์ลสแนปใน Exchange Server
318180มีผลต่อเธรด AdminSDHolder transitive สมาชิกของกลุ่มการแจกจ่าย
817433สิทธิ์ delegated ไม่พร้อมใช้งาน และสิ่งที่สืบทอดถูกปิดการใช้งานโดยอัตโนมัติ
306398AdminSDHolder object affects delegation of control for past administrator accounts

Special tasks for BlackBerry Enterprise Server

Task 1: Make sure that the BlackBerry Enterprise Server is running as a separate, unique account

Make sure that the BlackBerry Enterprise Server is running as a separate account that is specifically created for administrative tasks. By default, this account is called "BESAdmin."

If you have a separate account for administering the BlackBerry Enterprise Server, go to task 2.

If you do not have a separate account, create a separate account. Then, use this account to perform administrative tasks. For instructions about how to do this, visit one of the following BlackBerry Web sites, depending on the version of BlackBerry Enterprise Server that you are running.
BlackBerry Enterprise Server 4.0 or BlackBerry Enterprise Server 4.1
If you are running BlackBerry Enterprise Server 4.0 or BlackBerry Enterprise Server 4.1, see the BlackBerry Enterprise Server Installation Guide. To obtain this guide, click the following BlackBerry link:
http://na.blackberry.com/eng/deliverables/2751/BESX_Install_Guide_427146_11.pdf
BlackBerry Enterprise Server 3.6
If you are running BlackBerry Enterprise Server 3.6, see the BlackBerry Enterprise Server 2000/2003 Installation and Getting Started Guide. To obtain this guide, click the following BlackBerry link:
http://na.blackberry.com/eng/deliverables/1568/2000_2003_Installation_Guide.pdf

Task 2: Make sure that the BlackBerry Enterprise Server service account has the appropriate permissions

Verify that the BlackBerry Enterprise Server service account has the appropriate permissions.

หมายเหตุ:If the account is in a domain, make sure that the account is a member of only the Domain Users group. On a domain controller, the account should be member of the Built-in Administrators group.
  1. On the BlackBerry Enterprise Server, follow these steps:
    1. Make sure that the account is a member of the Local Administrators group.
    2. Assign "Log on Locally" and "Log on as a Service" permissions to the account.
  2. Grant Exchange View-Only Administrator permissions at the administrative group level. โดยให้ทำตามขั้นตอนต่อไปนี้::
    1. In Exchange System Manager, right-click the first Exchange Server administrative group name, and then clickDelegate Control.
    2. Notice that the BlackBerry Enterprise Server service account is listed as having the role of Exchange View-Only Administrator.
  3. Grant "Send As," "Receive As," and "Administer Information Store" permissions at the server level for each Exchange server. โดยให้ทำตามขั้นตอนต่อไปนี้::
    1. In Exchange System Manager, right-click the first Exchange Server administrative group name, and then expand theเซิร์ฟเวอร์กลุ่ม
    2. Right-click an Exchange server, clickคุณสมบัติแล้ว คลิกการรักษาความปลอดภัย.
    3. ในบานหน้าต่างด้านบนสุด เลือกองค์กร BlackBerry บัญชีบริการของเซิร์ฟเวอร์ ในบานหน้าต่างด้านล่าง ตรวจสอบให้แน่ใจว่า การ "ส่งเป็น "รับเป็น" และ"จัดเก็บข้อมูล Administer"สิทธิ์ถูกกำหนดเป็นอนุญาตให้.
    4. ทำซ้ำขั้นตอน 3b และ 3 c สำหรับแต่ละ Exchange เซิร์ฟเวอร์
  4. ให้สิทธิ์ "ส่งเป็น "ที่ได้รับเป็น" และเก็บการ"จัดดูแลข้อมูลเก็บ"สิทธิ์ไปยังกล่องจดหมาย โดยให้ทำตามขั้นตอนต่อไปนี้::
    1. คลิกขวาชื่อกลุ่มผู้ดูแลระบบ Exchange แรก ใน Exchange System Manager และขยายแล้ว นี้เซิร์ฟเวอร์กลุ่ม
    2. ขยายกลุ่มการจัดเก็บกล่องจดหมายแรก ให้คลิกขวาที่เก็บกล่องจดหมายแต่ละ คลิกคุณสมบัติแล้ว คลิกการรักษาความปลอดภัย.
    3. ในบานหน้าต่างด้านบนสุด เลือกองค์กร BlackBerry บัญชีบริการของเซิร์ฟเวอร์ ในบานหน้าต่างด้านล่าง ตรวจสอบให้แน่ใจว่า การ "ส่งเป็น "รับเป็น" และ"จัดเก็บข้อมูล Administer"สิทธิ์ถูกกำหนดเป็นอนุญาตให้.
    4. ทำซ้ำขั้นตอน 4b และ 4 c สำหรับแต่ละเก็บกล่องจดหมายบนแต่ละเซิร์ฟเวอร์ Exchange
  5. ในที่ผู้ใช้ของไดเรกทอรีที่ใช้งานอยู่และคอมพิวเตอร์สแนปอิน ดำเนินการดังต่อไปนี้:
    1. คลิกขวาที่ผู้ใช้ที่คุณต้อง การเพิ่มสิทธิ์สำหรับ แล้ว คลิกคุณสมบัติ.
    2. ในการการรักษาความปลอดภัยแท็บ เพิ่มบัญชีบริการ Server องค์กร BlackBerry และคลิกเพื่อเลือกนั้นส่งเป็นกล่องกาเครื่องหมาย
ถ้าคุณไม่ได้ใช้ Exchange Server 2003 ดูงาน 3

งานที่ 3: ล้างแคชบนเซิร์ฟเวอร์ขององค์กร BlackBerry

เมื่อต้องการล้างแคชสิทธิ์ในการเก็บ Exchange เริ่มต้นบริการที่เกี่ยวข้อง Blackberry แล้ว เริ่มการเก็บข้อมูล Exchange ของ Microsoft หลังจากที่คุณเริ่มต้นเก็บ Exchange คุณต้องเริ่มต้นบริการ Blackberry RIM เกี่ยวข้องกับการอนุญาตให้บัญชี "BESAdmin" ส่งเพิ่มเข้าไปใหม่เป็นสิทธิ์ในการเก็บ Exchange

ข้อมูลเพิ่มเติม

แลกเปลี่ยนกล่องจดหมายและโฟลเดอร์การเข้าถึงสิทธิ์ถูกแบ่งระหว่างฐานข้อมูล Active Directory และ Microsoft Exchange อย่างไรก็ตาม ทั้งสองประเภทของสิทธิ์ถูกกำหนดในคอนโซลการจัดการผู้ใช้ Active Directory แต่สิทธิ์ที่แตกต่างกันจะถูกเก็บไว้ในตำแหน่งที่ตั้งที่แยกต่างหากสอง

โดยทั่วไป ถ้าสิทธิ์ที่กำหนดไว้บนหน้าการรักษาความปลอดภัยสำหรับวัตถุ ได้มีสิทธิ์ในไดเรกทอรีที่ใช้งานอยู่ ถ้ามีการตั้งค่าในการแลกเปลี่ยนขั้นสูงกล่องจดหมายสิทธิ์หน้า จะมีสิทธิ์ของฐานข้อมูล Exchange

กระบวนการmsExchMailboxSecurityDescriptorแอตทริบิวต์ไดเรกทอรีที่ใช้งานอยู่คือ สำเนาสำรองของชุดย่อยของสิทธิ์ของกล่องจดหมายที่มีผลบังคับใช้ ซึ่งถูกใช้ภายใน โดยการแลกเปลี่ยนสำหรับวัตถุประสงค์ต่าง ๆ นอกจากนี้msExchMailboxSecurityDescriptorแอตทริบิวต์มีการปรับปรุงให้ตรงกับสิทธิ์การใช้งานปัจจุบันหากผู้ดูแลระบบใช้อินเทอร์เฟซที่ได้รับการสนับสนุนการกำหนดสิทธิ อย่างไรก็ตาม ถ้าการmsExchMailboxSecurityDescriptorแอตทริบิวต์ที่ถูกปรับเปลี่ยน โดยผู้ดูแลโดยตรง การเปลี่ยนแปลงจะไม่แพร่กระจายไปยังเก็บ Exchange และเปลี่ยนแปลงจะไม่มีผล ไม่ได้ถูกมีมีการซิงโครไนส์กับสิทธิ์ของกล่องจดหมายที่แท้จริง คุณไม่ควรใช้การmsExchMailboxSecurityDescriptorแอตทริบิวต์การอ่าน หรือเขียนสิทธิ์กล่องจดหมาย
สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
310866วิธีการตั้งค่าสิทธิ์ของกล่องจดหมายของ Exchange Server 2003 และ Exchange 2000 Server ในกล่องจดหมายที่มีอยู่ในเก็บข้อมูล

สิทธิ์การเข้าถึงกล่องจดหมายทั้งหมดไม่มีสิทธิ์ในการจัดเก็บฐานข้อมูล Exchange อนุญาตการส่งเป็นไม่มีสิทธิ์ในไดเรกทอรีที่ใช้งานอยู่ ก่อนที่จะแลกเปลี่ยน Store.exe ที่เปลี่ยนแปลงของแฟ้มที่ได้อธิบายไว้ในบทความนี้ ระบบ Exchange จึงไม่ดูการตั้งค่าสำหรับสิทธิ์ในการส่งเป็นถ้า ผู้ส่งอยู่มีการเข้าถึงกล่องจดหมายทั้งหมดอนุญาต

การรวมแบบส่งเป็นสิทธิ์ด้วยสิทธิ์แบบเต็มรูปแบบการเข้าถึงกล่องจดหมายได้เปิดใช้งานผู้ดูแลของเซิร์ฟเวอร์ Exchange การให้สิทธิ์การเข้าส่งเป็นอย่างมีประสิทธิภาพสำหรับกล่องจดหมายใด ๆ บนเซิร์ฟเวอร์ที่ผู้ดูแลตัวเอง โดย separating ส่งเป็นสิทธิ์จากสิทธิ์การเข้าถึงกล่องจดหมายทั้งหมด ผู้ดูแล Active Directory สามารถเดี๋ยวนี้บล็อกกระบวนการนี้ได้เนื่องจากการส่งเป็นการอนุญาตไม่มีสิทธิ์ในไดเรกทอรีที่ใช้งานอยู่และไม่มี Exchange เก็บสิทธิ์ ดังนั้น กระบวนการไม่จำเป็นต้องเป็นภายใต้การควบคุมของผู้ดูแลระบบ Exchange

เจ้าของกล่องจดหมาย

เจ้าของกล่องจดหมายที่ถูกกำหนดเป็นบัญชีผู้ใช้ Active Directory whosemsExchMailboxGUIDแอตทริบิวต์ปฏิบัติรหัสไม่ซ้ำกัน (GUID) สำหรับกล่องจดหมายที่เฉพาะ บัญชีเดียวเท่านั้นในฟอเรสต์ทั้งหมดจะได้รับอนุญาตเพียง GUID สำหรับกล่องจดหมายที่เฉพาะ ถ้าคุณพยายามที่จะกำหนดเจ้าของที่สอง ด้วย GUID ที่เดียวกัน Active Directory จะปฏิเสธการเปลี่ยนแปลง ด้วยข้อผิดพลาด

เมื่อเปิดใช้คุณกล่องจดหมายงานบัญชีผู้ใช้หรือเมื่อคุณเชื่อมต่อกล่องจดหมายที่ต่อกับบัญชีผู้ใช้ Active Directory กล่องจดหมาย GUID ถูกกำหนดโดยอัตโนมัติบนบัญชีนั้น จะไม่ค่อยจำเป็น หรือแนะนำสำหรับผู้ดูแลเพื่อตั้งค่า guid ของกล่องจดหมายโดยตรง

บัญชีภายนอกที่เกี่ยวข้อง

การกำหนดค่าการแลกเปลี่ยนทั่วไปคือการ ติดตั้ง Exchange ในฟอเรสต์ทรัพยากร ฟอเรสต์ทรัพยากรอยู่ในฟอเรสต์ในฟอเรสต์อื่นจากบัญชีผู้ใช้ที่จะมีกล่องจดหมายในระบบ This presents a problem because themsExchMailboxGUIDattribute can only be set on objects in the same forest as the Exchange server.

The solution to this problem is to mailbox-enable an account in the Exchange server forest. Then, you link this mailbox-enabled account to one in another forest or in a Microsoft Windows NT 4 domain. You can do this by granting the Associated External Account permission. Only a single account can be granted the Associated External Account permission. The account that is selected must be from a different forest.

When you set the Associated External Account permission, you are writing the SID value for the external account to themsExchMasterAccountSIDattribute of the mailbox owner. Therefore, this is not a permission at all, but a convenient way to control the value of themsExchMasterAccountSIDแอตทริบิวต์ หลังจากmsExchMasterAccountSIDattribute has been set, the external account that owns the SID will be granted Exchange access as if it were the actual mailbox owner account.

หมายเหตุ:This applies only to Exchange access, not to all Active Directory access. Additionally, you should mark the mailbox owner account as Disabled for logons after you set the Associated External Account permission so that all permissions work as expected.
สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
300456Client permissions and delegations do not persist after being assigned in Exchange 2000

Delegation scenarios

A delegate is a user who has been granted partial access to another mailbox and the right to send e-mail messages on behalf of that mailbox owner. A common delegation scenario is to grant delegate access to an administrative assistant for an executive's calendar. The delegate can typically read and update the calendar. Additionally, the delegate can reply to any e-mail messages on behalf of the executive.

You can use the following two interfaces to grant the Send on Behalf Of and delegate permissions:
  • On the mailbox owner object, grant the Send on Behalf Of permission in the Exchange General dialog box.
  • In Microsoft Office Outlook, use theDelegatesกล่องโต้ตอบ
Both these methods set thepublicDelegatesattribute of the mailbox. All users who are listed in this attribute have the Send on Behalf Of permission for the mailbox owner. When such delegates send an e-mail message that has the owner's name in theจากbox, the e-mail message is sent from the delegate and not from or as the mailbox owner. The e-mail message'sจากbox displays the following value:
Delegate's Name> on behalf ofMailbox Owner>
In some cases, you may be unable to set thepublicDelegatesattribute in Outlook.สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
329622"ส่งในนาม" อนุญาตจะไม่กำหนดให้กับผู้ใช้หลังจากที่คุณการมอบหมายต่อการเข้าถึงใน Outlook

ถ้าคุณอนุญาตให้ผู้รับมอบสิทธิ์ในการเข้าถึงไปยังกล่องจดหมายของคุณ ผู้รับมอบสิทธิ์สามารถใช้ส่งในนามของสิทธิ์แม้ว่าคุณไม่ให้เข้ากับหนึ่งโฟลเดอร์กล่องจดหมายของคุณ สิทธิ์ fundamental ที่มีผู้รับมอบสิทธิ์ถูกส่งในนามของสิทธิ์ สิทธิ์การเข้าถึงโฟลเดอร์กล่องจดหมายของคุณแยกต่างหาก และต้องได้รับนอกเหนือจากการการมอบหมายสิทธิ์ โดยทั่วไป ผู้รับมอบสิทธิ์จะใช้ Outlook เพื่อเข้าถึงโฟลเดอร์แต่ละที่ที่คุณได้กำหนดให้สิทธิ์ เมื่อต้องการทำเช่นนี้ คลิกOPENในการแฟ้ม:เมนูใน Outlook แล้วคลิกโฟลเดอร์ของผู้ใช้อื่น.

อีกวิธีหนึ่งคือ ผู้รับมอบสิทธิ์สามารถเปิดกล่องจดหมายของคุณ โดยการแสดงรายการเป็นกล่องจดหมายเพิ่มเติมในการขั้นสูงแท็บของส่วนกำหนดค่า Outlook ของพวกเขา วิธีนี้ทำให้กล่องจดหมายของคุณจะปรากฏในแผนภูมิของโฟลเดอร์ Outlook ของผู้รับมอบสิทธิ์ นอกจากนี้ วิธีนี้ช่วยให้การเข้าถึงโฟลเดอร์ทั้งหมดในกล่องจดหมายของคุณซึ่งเป็นผู้รับมอบสิทธิ์ได้รับอนุญาตให้สิทธิ์

คุณอาจต้องการผู้รับมอบสิทธิ์ของคุณเพื่อให้ส่งในนามของสิทธิ์ และในบางครั้งมีสิทธิ์ในการส่งเป็นบางครั้ง การกำหนดค่าผู้รับมอบสิทธิ์ที่ มีสิทธิ์เหล่านี้สอง ดำเนินการดังต่อไปนี้:
  • อนุญาตให้ผู้รับมอบสิทธิ์อนุญาตการเข้าถึงกล่องจดหมายทั้งหมด ซึ่งไม่สามารถทำผ่าน Outlook แทน Active Directory ผู้ดูแลต้องทำในบัญชีเจ้าของกล่องจดหมาย แม้ว่าคุณสิทธิ์เจ้าของบนทุก ๆ โฟลเดอร์ในกล่องจดหมายของคุณ ที่ไม่ได้รับสิทธิ์เดียวกันเป็นสิทธิ์การเข้าถึงกล่องจดหมายทั้งหมด
  • ไม่ให้ผู้รับมอบสิทธิ์อนุญาตการส่งเป็น ถ้าคุณอนุญาตผู้รับมอบสิทธิ์อนุญาตการส่งเป็น ข้อความอีเมล์ทั้งหมดที่ถูกส่ง โดยผู้รับมอบสิทธิ์จะสามารถทำกับสิทธิ์การส่งเป็น ผู้รับมอบสิทธิ์จะไม่สามารถส่งในนามของสิทธิ์ใช้
ในสถานการณ์สมมตินี้ ผู้รับมอบสิทธิ์ที่ต้องการส่งในนามของสิทธิ์ใช้ ควรล็อกอินไปยังกล่องจดหมายของตนเอง ถ้าผู้รับมอบสิทธิ์ถูกตอบกลับ หรือส่งต่อข้อความอีเมล์ที่มีอยู่ในโฟลเดอร์ของคุณอย่างใดอย่างหนึ่ง ข้อความอีเมลที่จะอัตโนมัติถูกส่งในนามของคุณ ถ้าผู้รับมอบสิทธิ์สร้างข้อความอีเมลใหม่ในนามของคุณ เหล่านั้นต้องใส่ชื่อของคุณในการจากกล่องข้อความอีเมล์ที่ส่งในนามของคุณ

คำนึงถึงว่าผู้รับมอบสิทธิ์มีเปิดโฟลเดอร์ของคุณหรือกล่องจดหมายของคุณทั้งหมดเป็นกล่องจดหมายที่รอง ข้อความอีเมล์ทั้งหมดที่พวกเขาส่งจากที่คุณจะใช้ส่งในนามของสิทธิ์ตราบเท่าที่กล่องจดหมายของตนเองเป็นกล่องจดหมายหลักสำหรับส่วนกำหนดค่า Outlook ปัจจุบัน

เมื่อผู้รับมอบสิทธิ์ที่ต้องการส่งข้อความอีเมลเมื่อคุณ เหล่านั้นควรล็อกอินไปยังกล่องจดหมายของคุณได้ โดยใช้โปรไฟล์ Outlook แยกต่างหากที่เปิดเท่านั้นกล่องจดหมายของคุณ อีเมลข้อความที่ส่งผู้รับมอบสิทธิ์ในขณะที่พวกเขาเข้าสู่ระบบไปยังส่วนกำหนดค่านี้จะถูกส่งไปจากคุณโดยอัตโนมัติ

การค้นหาบัญชีที่มีสิทธิ์ในการเข้าถึงกล่องจดหมายทั้งหมด โดยไม่มีสิทธิ์ในการส่งเป็น

สคริปต์ตัวอย่างที่อธิบายไว้ในส่วนนี้สามารถค้นหาโดเมน Active Directory หนึ่งครั้งสำหรับบัญชีผู้ใช้ที่สิทธิ์การเข้าถึงกล่องจดหมายทั้งหมดได้รับอนุญาตให้ไปกล่องจดหมายโดยไม่มีสิทธิ์ในการส่งเป็น

สิ่งสำคัญก่อนที่คุณเปลี่ยนแปลงสิทธิ์ ดู "เกี่ยวกับเจ้าของกล่องจดหมายที่มีผู้รับมอบสิทธิ์"ส่วน

สคริปต์มีวิธีการสามแบบต่อไปนี้:
  • ส่งออกคุณสามารถแสดงรายการของผู้ใช้ที่มีการเข้าถึงกล่องจดหมายทั้งหมดสิทธิ์แต่ไม่ส่งเป็นสิทธิ์ได้ คุณสามารถตรวจสอบรายการนี้ใน Notepad หรือโปรแกรมแก้ไขอื่นบัญชีใดที่คุณต้องการไม่มีสิทธิ์ในการส่งเป็น การเอาออกแล้ว
  • นำเข้าคุณสามารถนำเข้ารายชื่อของผู้ใช้ที่มีการเข้าถึงกล่องจดหมายทั้งหมดที่อนุญาตการส่งเป็นควรจะได้รับการอนุญาตได้ โปรดสังเกตว่า คุณไม่สามารถใช้สคริปต์นี้เพื่อให้สิทธิ์การเข้าถึงกล่องจดหมายทั้งหมดและสิทธิ์ในการส่งเป็น แต่ละบัญชีต้องมีการเข้าถึงกล่องจดหมายทั้งหมดสิทธิ์ในการได้รับสิทธิ์ในการส่งเป็น
  • SetAllคุณสามารถให้สิทธิ์ในการส่งเป็นผู้ใช้ทั้งหมดในโดเมนที่มีสิทธิ์ในการเข้าถึงกล่องจดหมายทั้งหมดสำหรับกล่องจดหมายที่เฉพาะ แฟ้มบันทึกจะถูกสร้างขึ้นในรูปแบบเดียวกันกับแฟ้มส่งออก นี่คือเท่ากับการใช้งานโหมดการส่งออกและนำเข้าโดยไม่ต้องการแก้ไขไฟล์การส่งออก
หมายเหตุ:ไม่มีฟังก์ชันยกเลิกในสคริปต์นี้

สิทธิ์ที่จำเป็นสำหรับสคริปต์

คุณต้องรันสคริปต์ในขณะที่คุณเข้าสู่ระบบ ด้วยบัญชีผู้ดูแลที่มาจากฟอเรสต์เดียวกันที่บัญชีของเจ้าของกล่องจดหมายมาจาก สคริปต์อาจไม่ทำงานกับบัญชีผู้ใช้ที่มีสิทธิ์ระดับผู้ดูแลของฟอเรสต์ซึ่งกันและกัน สคริปต์อาจจะไม่ทำงานเมื่อคุณเรียกใช้จากเวิร์กสเตชันที่ไม่ได้เป็นสมาชิกของฟอเรสต์อื่นนอกเหนือจากฟอเรสต์ซึ่งมีการเชื่อมต่อบัญชีของเจ้าของกล่องจดหมาย

Given these conditions, you can run the script with multiple administrative accounts in a single logon session by using theRunAs.exeคำสั่ง This procedure may be useful if you have segmented Active Directory and Exchange Server permissions, and you have no single account that can administer all Exchange servers or all Active Directory domains. You can open a command prompt to run the script as each administrative account. ให้พิจารณาตัวอย่างต่อไปนี้:
RunAs.exe /user:domain\account CMD.EXE
หมายเหตุ:You should not run multiple copies of the script at the same time against the same domain.

The fields in the export file are as follows. The fields are described in the order in which they are presented in the export file.
  • Display name of the mailbox owner account

    There may be more than one line in the output file that lists the same mailbox owner. This behavior occurs when multiple other accounts have Full Mailbox Access permissions to the same mailbox.
  • Domain and logon name of an account that has the Full Mailbox Access permissions but not the Send As permission

    The same account may appear multiple times throughout the export file when the account has access to multiple mailboxes. This is likely to be the case for an application service account or for a person who manages multiple resource mailboxes.
  • Display Name of an account that has the Full Mailbox Access permission but not the Send As permission

    This field is provided in addition to theLogon Namefield to make it easier for you to identify the account.
  • Delegate Status of the mailbox owner

    If the mailbox owner has delegates, the field value isHas Delegates. If the mailbox owner has no delegates, the field value isNo Delegates.
  • Enabled or disabled status of the mailbox owner account

    This field is useful when you want to identify resource accounts or cross-forest mailbox accounts. Typically, these accounts are disabled.
  • Full Distinguished Name of the mailbox owner account

    This field is useful when you want to identify the domain and the container of the mailbox owner account.
  • Full Distinguished Name of the mailbox owner's mailbox database

    This field includes the database, the storage group, the server, and the administrative group for the mailbox.
In the following example, the user who has the logon name "NoSendAs" has the Full Mailbox Access permission but not the Send As permission for the "Mailbox Owner" mailbox:
"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [additional fields omitted]

Administrative workstation configuration for the script

This script uses Exchange management interfaces to communicate with Exchange servers. Therefore, this script must be run from an Exchange server or from a workstation with Exchange System Administrator installed.

Editing the export file

The export file is formatted as Unicode plain text so that character sets from multiple languages can be accommodated. Some text editors may be unable to correctly view or edit the file or may save the file as ANSI or ASCII text. The Notepad utility for Windows Server 2003, Windows XP, and Microsoft Windows 2000 can correctly handle Unicode text files. Additionally, Microsoft Office Excel can correctly handle Unicode text files.

The output file is in a tab-delimited format with triple quotation marks around the values for each field. The triple quotation marks are used to make importing and exporting from Excel more deterministic. In Excel, the triple quotation marks will become single quotation marks, and will revert to triple quotation marks when the file is saved again as Unicode text. See the following instructions to correctly open and save an export file in Excel.

นอกจากนี้คุณสามารถกรองไฟล์การส่งออกโดยไม่ใช้ Excel โดยใช้โปรแกรมอรรถประโยชน์ Find.exe หรือโปรแกรมอรรถประโยชน์ Findstr.exe โปรแกรมอรรถประโยชน์เหล่านี้มีอยู่ใน Windows จะช่วยให้คุณค้นหาคำในแฟ้ม และแสดงเฉพาะบรรทัดที่ประกอบด้วยคำเหล่านั้นหรือเฉพาะบรรทัดที่ไม่ประกอบด้วยคำเหล่านั้น ตัวอย่างเช่น ถ้าคุณต้องการตรวจสอบรายการในแฟ้มของเจ้าของกล่องจดหมายทั้งหมดที่มีผู้รับมอบสิทธิ์ ใช้อย่างใดอย่างหนึ่งคำสั่งเหล่านี้เพื่อสร้างแฟ้มที่ประกอบด้วยเฉพาะบรรทัดที่ มีสตริงที่ "ผู้รับมอบมีสิทธิ์":
Find.exe "มีผู้รับมอบสิทธิ์" OriginalFile.txt > HasDelegates.txt

Findstr.exe /C: "มีผู้รับมอบสิทธิ์" OriginalFile.txt > HasDelegates.txt
เป็นอย่างอื่น สมมติว่า คุณกรองข้อมูลออกจากเจ้าของกล่องจดหมายทั้งหมดกับผู้รับมอบสิทธิ์ กระบวนการ/vสวิตช์ outputs บรรทัดทั้งหมดที่ไม่ตรงกับคำที่ค้นหา คุณสามารถใช้คำสั่งเหล่านี้ใด ๆ ในการสร้างแฟ้มที่แยกบรรทัดทั้งหมดของ "ผู้รับมอบมีสิทธิ์":
Find.exe OriginalFile.txt "ผู้รับมอบไม่มีสิทธิ์" > NoDelegates.txt

Find.exe /V "มีผู้รับมอบสิทธิ์" OriginalFile.txt > NoDelegates.txt

Findstr.exe /C: OriginalFile.txt "ผู้รับมอบไม่มีสิทธิ์" > NoDelegates.txt

/C: /V Findstr.exe "มีผู้รับมอบสิทธิ์" OriginalFile.txt > NoDelegates.txt
คุณยังสามารถใช้คำสั่งเหล่านี้เพื่อสร้างแฟ้มที่แสดงรายการบัญชีทั้งหมดที่มีสิทธิ์แบบเต็มรูปแบบการเข้าถึงกล่องจดหมาย แต่ไม่มีสิทธิ์ในการส่งเป็นการบริการบัญชีแอพลิเคชัน กระบวนการ/iสวิตช์ทำคำสั่ง case-insensitive:
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 ถ้าคุณใช้อักขระตัวแทน แต่ละบรรทัดในแฟ้มผลลัพธ์จะถูก prefaced ตามชื่อแฟ้ม ตรวจคุณควรสอบแฟ้มผลลัพธ์อย่างระมัดระวังหลังจากที่คุณกรองข้อมูล โดยใช้ Find.exe หรือ Findstr.exe เพื่อตรวจสอบการจับภาพตัวกรองของคุณ หรือรวมบัญชีที่คุณตั้งใจ

ในตัวอย่างต่อไปนี้ ผู้ใช้ที่มีการเข้าสู่ระบบชื่อ "NoSendAs" มีสิทธิ์ในการเข้าถึงกล่องจดหมายทั้งหมด แต่ไม่ส่งเป็นการอนุญาตสำหรับกล่องจดหมาย "เจ้าของกล่องจดหมาย"
"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [additional fields omitted] 

เกี่ยวกับเจ้าของกล่องจดหมายที่มีผู้รับมอบสิทธิ์

ผู้รับมอบสิทธิ์ที่มีการเข้าถึงกล่องจดหมายทั้งหมด (เรียกอีกอย่างว่าเป็น "super-delegate") มัก จะไม่ได้รับสิทธิ์ในการส่งเป็น เมื่อ super-delegate การล็อกโดยตรงบนกล่องจดหมายของเจ้าของกล่องจดหมาย ผู้รับมอบสิทธิ์ที่สามารถส่งเป็นเจ้าของ เมื่อผู้รับมอบสิทธิ์การใช้(คุณลักษณะการมอบหมายของ Outlookเพิ่มเติมกล่องจดหมายเพื่อเปิดหรือเปิดโฟลเดอร์ของผู้ใช้อื่น), ข้อความจะถูกส่งในนามของเจ้าของ

ให้สิทธิ์ในการส่งเป็น super-delegate เป็นเฉพาะเมื่อคุณต้องการให้ผู้รับมอบสิทธิ์เสมอ เพื่อส่งเป็นเจ้าของกล่องจดหมาย และไม่เคยส่งในนามของเจ้าของกล่องจดหมาย ขอแนะ นำให้ คุณค้นหาไฟล์การส่งออกสำหรับข้อความ "ผู้รับมอบมีสิทธิ์" แล้ว ตรวจสอบว่า มีหนึ่ง super-delegates ที่ระบุไว้เป็นผู้รับมอบจริงสิทธิ์ของเจ้าของกล่องจดหมาย

super-delegates เท่านั้นไว้ในไฟล์การส่งออก ผู้รับมอบสิทธิ์ปกติไม่มีสิทธิ์แบบเต็มรูปแบบการเข้าถึงกล่องจดหมาย นอกจากนี้ เมื่อคุณอนุญาตให้สิทธิ์ในการส่งเป็นการเพิ่มผู้รับมอบสิทธิ์ปกติ ผู้รับมอบสิทธิ์ที่จะส่งเสมอเป็นเจ้าของกล่องจดหมาย นี้เป็นจริงแม้ว่าผู้รับมอบสิทธิ์ที่ธรรมดาไม่มีสิทธิ์แบบเต็มรูปแบบการเข้าถึงกล่องจดหมาย ยกหากคุณให้ส่งเป็นสิทธิ์ไปยังผู้รับมอบสิทธิ์เมื่อคุณจึงไม่ต้องการจะ คุณสามารถได้อย่างง่ายดายเลิกสิทธิ์ในภายหลัง

วิธีการเปิดแฟ้มส่งออกใน Excel

  1. เริ่ม Excel ก่อนที่จะเปิดไฟล์การส่งออก
  2. เปิดแฟ้มใน Excel ตามที่พิมพ์แฟ้มข้อความ ตัวช่วยสร้างการนำเข้าข้อความเริ่มต้น
  3. ในตัวช่วยนำเข้าข้อความ เปลี่ยนแปลง หรือการยอมรับการตั้งค่าต่อไปนี้:
    • ชนิดข้อมูลดั้งเดิม: กำหนดเขต
    • เริ่มการนำเข้าที่แถว: 1
    • จุดเริ่มต้นของแฟ้ม: Unicode (UTF-8)
    • ตัวคั่น: แท็บเท่านั้น
    • ถือตัวคั่นที่อยู่ติดกันเป็นอย่างใดอย่างหนึ่ง: unmarked
    • ข้อความ qualifier: กสอง "(ครั้งอัญประกาศ)

วิธีการบันทึกไฟล์การส่งออกหลังจากที่คุณแก้ไขแฟ้มใน Excel

  1. ในไฟล์การส่งออก คลิกบันทึกเป็น.
  2. บันทึกแฟ้ม โดยใช้ชื่ออื่นเพื่อให้คุณเก็บสำเนาข้อ unedited ของแฟ้มต้นฉบับ
  3. คลิกแฟ้ม:คลิกบันทึกเป็นป้อนชื่อแฟ้มสำหรับการบันทึกผลลัพธ์ และจากนั้น คลิกข้อความ unicodeในการบันทึกเป็นชนิดรายการ

ไวยากรณ์ของสคริปต์

นี่คือสคริปต์โหมดข้อความ และควรจะรันในหน้าต่างพร้อมรับคำสั่ง ไม่ใช่จากนั้นเรียกใช้กล่องโต้ตอบ เมื่อต้องเปิดหน้าต่างพร้อมรับคำสั่ง คลิกเริ่มการทำงานคลิกเรียกใช้ประเภท:cmdในการOPENกล่อง แล้วคลิกตกลง.

ล็อกข้อผิดพลาดและการส่งออกแฟ้มจะถูกบันทึกไปยังไดเรกทอรีพรอมต์คำสั่งปัจจุบัน คุณต้องมีสิทธิ์ในการสร้างแฟ้มในไดเรกทอรีนี้ เมื่อต้องการขอรับความช่วยเหลือของบรรทัดคำสั่ง ใส่คำสั่งต่อไปนี้:
CSCRIPT AddSendAs.vbs
เมื่อต้องการส่งออกผู้ใช้ที่มีการเข้าถึงกล่องจดหมายทั้งหมด โดยไม่มีการส่งเป็นสิทธิ์สำหรับโดเมน ใส่คำสั่งต่อไปนี้:
CSCRIPT AddSendAs.vbs [domain controller name] –Export
Example:
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"

How to grant the Send As permission for each mailbox in the domain for all users who already have the Full Mailbox Access permission for a mailbox

หมายเหตุ:If you have delegates who also have the Full Mailbox Access permission in your organization, you should not use the SetAll mode. If you do use the SetAll mode in this situation, delegates will be granted the Send As permission. This behavior can cause all e-mail messages that they send to use the Sent As permission instead of the Sent on Behalf Of permission. You can correct this behavior by removing the Send As permission that was mistakenly granted to the delegate:
CSCRIPT AddSendAs.vbs [domain controller name] –SetAll


Example:


CSCRIPT AddSendAs.vbs CORP-DC-1 –SetAll
If you use the SetAll mode, an export file will be generated as Send_As_Export_H_MM_SS.txt. You should save this file because it is a record of all the accounts that were changed. If you were to run the script again, it would not output the same list of accounts because the accounts would already have been granted the Send As permission.

Errors that you experience while you are running the script will be saved to the Send_As_Errors_H_MM_SS.txt file. The error file name will match the hours_minutes_seconds time stamp of any associated export file.

Script modifications

There may be accounts in your organization that have permissions on many objects, but you do not want to alter the permissions. To reduce the size of the export file, you can filter these accounts by modifying the FMA_EXCLUSIVE_LIST variable that is located near the top of the script. By default, this variable lists a few accounts that should be suppressed in the script output. You can add more accounts by using the following format.
& "<Domain\Name>" & OUTPUT_DELIMITER
For example, you could change the value of the following variable.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
so that it appears as follows.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER & "Mydomain\Service1" & OUTPUT DELIMITER
This change suppresses the listing of the "Mydomain\Service1" account in the export file together with "NT AUTHORITY\SELF" and "NT AUTHORITY\SYSTEM." Notice that the Domain\Name value is case-sensitive, and it must appear exactly as it does or as it would in the export file.

There is another editable variable, FMA_EXCLUSIVE_EXSVC, that has the default value "\Exchange Services" & OUTPUT_DELIMITER. "Exchange Services" is the name of an account that is granted permissions through the Active Directory Connector in Exchange Server 5.5 and in Exchange 2000 migration and co-existence scenarios. This account is created in multiple domains, and it may appear repeatedly in the export file if it is not suppressed.

The FMA_EXCLUSIVE_EXSVC variable accepts only one account as its value. The account name is not case-sensitive. The account must start with a backslash character (\) and should not include the domain to which the account belongs. The account will be suppressed for all domains in which it exists.

If you have used third-party migration tools or directory synchronization methods, a different account may exist in multiple domains that has widely-granted permissions to user mailboxes. In this scenario, you can substitute the name of that account for "\Exchange Services."

Tips and caveats

  • Do not discard log and error files that are generated by the script. They may be valuable for troubleshooting or reversing changes later. Remember, as soon as you have granted the Send As permission to an account, it will no longer be logged in the export file.
  • If an Exchange server or database is down, script processing will be slower. In such a case, you can sort the export file by database and move lines that are associated with a stopped database to a different file for later import.
  • สคริปต์ไม่ใส่ผลลัพธ์ของบัญชีที่กำหนดให้ชื่อเข้าสู่ระบบใน "$" สิ้นสุด หรือไม่ AUTHORITY\SYSTEM NT บัญชีระบบเหล่านี้ควรไม่มักจะต้องมีการส่งเป็นสิทธิ์ และการเอาออกจากไฟล์การส่งออกได้อย่างมากลดขนาดของ
  • ไฟล์การส่งออกต้องอยู่ในรูปแบบ Unicode ก่อนที่สามารถถูกนำเข้า ถ้าคุณบังเอิญได้บันทึกแฟ้มเป็นข้อความ ANSI คุณสามารถแก้ไขปัญหานี้ ด้วยในขณะโหลดแฟ้มใน Notepad และบันทึกเป็น Unicode ข้อความได้
  • ถ้าการนำเข้าไม่ทำงาน แก้ไขกับบัญชีการทดสอบและบรรทัดที่หนึ่งในไฟล์นำเข้า คุณควรกำหนดค่าบัญชีผู้ใช้ทดสอบที่มีกล่องจดหมายที่บนเซิร์ฟเวอร์ Exchange ที่กำลังทำงาน และจากนั้น ให้สิทธิ์ในการเข้าถึงกล่องจดหมายทั้งหมดไปยังบัญชีการทดสอบอื่น ไม่อนุญาตการส่งเป็นสิทธิ์ไปยังบัญชีของการทดสอบอื่น
  • ไม่มีโหมดการยกเลิกสำหรับสคริปต์นี้ได้ เมื่อต้องการใช้เก็บส่งเป็นสิทธิ์ที่คุณได้ให้กับสคริปต์นี้ คุณต้องสร้างสคริปต์อื่น หรือลบแฟ้มเหล่านั้นด้วยตนเอง ไม่มีโหมดการยกเลิกเพื่อหลีกเลี่ยงการใช้สคริปต์นี้เพื่อลบการส่งเป็นสิทธิ์สำหรับผู้ใช้ทั้งหมดในองค์กร
  • สคริปต์ไม่ถูกต้องจัดการบัญชีผู้ใช้ที่ได้รับอนุญาตให้ตัวควบคุมแบบเต็มรูปแบบของวัตถุผู้ใช้พร้อมกับการเข้าถึงกล่องจดหมายทั้งหมด ควบคุมทั้งหมดรวมถึงสิทธิ์ในการส่งเป็น แต่สคริปต์จะส่งออกบัญชีว่าไม่มีสิทธิ์ในการส่งเป็น ซึ่งอาจเพิ่มขนาดของไฟล์การส่งออก แต่ทำไม่เกิดขึ้นจากการนำเข้าแฟ้ม และอนุญาตแล้ว redundantly ให้ส่งเป็นสิทธิ์กับบัญชีผู้ใช้เช่น
  • ไม่สามารถประมวลผล โดยใช้สคริปต์นี้ให้กับการใช้งานไดเรกทอรีของบัญชีผู้ใช้ที่มี distinguished ชื่อ และที่รวมแท็บหรืออัญประกาศคู่ unmatched สคริปต์สามารถประมวลผลเป็นชื่อที่มีตรงคู่อัญประกาศเช่นต่อไปนี้: อย่างถูกต้อง
    " CN =แรก"เล่น"สุดท้าย DC =โดเมน DC = com "
  • แต่ละรุ่นของ Excel สนับสนุนการจำกัดบรรทัดสูงสุดที่แตกต่างกันสำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
    120596ไม่สามารถนำเข้าแฟ้มข้อความที่มีขนาดใหญ่กว่าแถว 65,536 กับ Excel 97, Excel 2000, Excel 2002 และ Excel 2003
    ต่อไปนี้คือ ขีดจำกัดของแถวสำหรับ Excel 2003 และ Excel 2007 ที่ใช้งาน:
    • แถวใน Excel 2003:65,536
    • Excel 2007:1,048,576 แถว
    ถ้าแฟ้มแสดงผลของคุณมีขนาดใหญ่กว่าขีดจำกัดเหล่านี้ คุณต้องแยกแฟ้มลงในส่วนก่อนที่โหลดใน Excel
  • แฟ้ม Send_As_Errors จะแสดงรายการบัญชีเฉพาะมีความล้มเหลวในการอ่าน หรือเขียนสิทธิ์ ถ้าบัญชีผู้ใช้อื่นในโดเมนอย่างถูกต้องถูกประมวลผล บัญชีเหล่านี้อาจมีบางสิ่งบางอย่างในเหมือนที่ป้องกันไม่ให้สคริปต์ทำงานกับแฟ้มเหล่านั้น ปัญหาที่พบโดยทั่วไปรวมต่อไปนี้:
    • ไม่มีสิทธิ์ระดับผู้ดูแลเมื่อต้องการดู หรือตั้งค่าคุณสมบัติในบัญชี
    • เก็บกล่องจดหมายของ Exchange ไม่ทำงาน
    • เวิร์กสเตชันไม่ใช่สมาชิกของโดเมนเดียวกัน
    • แอคเคาท์ผู้ดูแลระบบที่กำลังใช้งานไม่ได้มาจากฟอเรสต์เดียวกัน
เมื่อต้องการรันสคริปต์นี้ คัดลอก และวางบรรทัดทั้งหมดระหว่าง BEGIN สคริปต์และ END สคริปต์ลงในตัวแก้ไขข้อความล้วนเช่น Notepad บันทึกสคริปต์เป็น AddSendAs.vbs begin สคริปต์
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:
http://support.microsoft.com/default.aspx?scid=fh;[LN];CNTACTMS
ผลิตภัณฑ์ของบุคคลที่สามที่กล่าวถึงในบทความนี้ ผลิตขึ้นโดยบริษัทที่ไม่ขึ้นอยู่กับ Microsoft Microsoft ไม่รับประกัน ทั้งโดยนัยหรืออย่างอื่นใด เกี่ยวกับประสิทธิภาพหรือความน่าเชื่อถือของผลิตภัณฑ์เหล่านี้

คุณสมบัติ

หมายเลขบทความ (Article ID): 912918 - รีวิวครั้งสุดท้าย: 16 มกราคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Exchange 2000 Enterprise Server
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange Server 2003 Enterprise Edition
Keywords: 
kbtshoot kbpending kbbug kbprb kbmt KB912918 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:912918

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com