אין באפשרות המשתמשים לשלוח הודעות דואר אלקטרוני מהתקן נייד או מתיבת דואר משותפת ב-Exchange 2000 Server וב-Exchange Server 2003?

תרגומי מאמרים תרגומי מאמרים
Article ID: 912918 - View products that this article applies to.
הרחב הכל | כווץ הכל

On This Page

מאפייני הבעיה

בעת ניסיון לשלוח הודעת דואר אלקטרוני ב-Microsoft Exchange 2000 Server או ב-Microsoft Exchange Server 2003, לא ניתן לשלוח את הודעת הדואר האלקטרוני. בנוסף, עשויה להופיע אחת מהודעות השגיאה או אחד מדוחות אי-המסירה (NDR) הבאים:

הודעות שגיאה

  • הגישה נדחתה
  • אין לך הרשאה מספקת לביצוע פעולה זו באובייקט זה. פנה אל איש הקשר של התיקיה או אל מנהל המערכת.
  • Unlisted Message Error
  • MAPI_E_NO_ACCESS -2147024891
  • Failed to submit mail message for user USERNAME (HRESULT:-2147024891) Pausing user USERNAME. ?(Security error - Cannot access the users mailbox.)??
  • Resource Not Found (המשאב לא נמצא)
שים לב הודעת השגיאה 'הגישה נדחתה' או הודעת השגיאה Resource not found (המשאב לא נמצא) מתקבלות מ-Outlook Web Access כאשר אתה מחובר כחשבון נציג.

הודעות אי-מסירה (NDRs)

  • אין לך הרשאה לשלוח דואר אלקטרוני לנמען זה. לקבלת סיוע, פנה למנהל המערכת.
  • לא הייתה אפשרות לשלוח את ההודעה באמצעות תיבת הדואר שלך. אין לך הרשאה לשליחת ההודעה בשם המשתמש שצוין.
ידוע כי בעיה זו משפיעה על המוצרים הבאים של ספקים חיצוניים:
  • Research In Motion (RIM) BlackBerry Enterprise Server (BES)?
  • Good Technology GoodLink Wireless Messaging
אולם התקבל אישור כי לבעיה זו אין כל השפעה על המוצרים הבאים של ספקים חיצוניים.
  • Cisco Unity Unified Messaging
  • Quest Migration Suite for Exchange
  • תוכנית השירות Microsoft ExMerge עבור Exchange
בעיה זו עלולה להשפיע גם על תוכניות מבוססות MAPI או Collaborative Data Objects ?(CDO) השולחות הודעות דואר אלקטרוני.

מוצרים נוספים של ספקים חיצוניים, העושים שימוש בחשבונות שירות כדי לשלוח הודעות דואר אלקטרוני, עשויים גם הם להיות מושפעים. אם אתה מפעיל מוצר של ספק חיצוני המושפע מבעיה זו, מומלץ לפנות לספק כדי לקבל את עזרתו בפתרון בעיה זו. לקבלת פרטים נוספים, עיין בסעיף 'מידע נוסף'.

חשוב כאמצעי חירום לשחזור הפונקציונליות של 'שלח כ' ליישומים חיוניים לעסקים, באפשרותך להעניק את ההרשאה 'שלח כ' לחשבון שירות באמצעות ירושה בגורם מכיל של Active Directory או אף בתחום שלם. לשם כך, עיין בהוראות המפורטות בסעיף . על אף שזוהי דרך יעילה לפתרון הבעיה המיידית, קיימות השלכות אבטחה וניהול שיש לשקול. הענקת ההרשאה עשויה להחיל את ההרשאה 'שלח כ' לחשבונות שלא היתה כוונה להעניקה להם, ויש לשקול את ההרשאה 'שלח כ' בעת העברת חשבונות משתמשים לגורם מכיל אחר.

סיבה

בעיה זו עלולה להתרחש כאשר אחד מהתנאים הבאים מתקיים:
  • אין ברשותך הרשאות לשליחת הודעות דואר אלקטרוני בתור הבעלים של תיבת הדואר בחשבון בו אתה משתמש כדי לשלוח את הודעת הדואר האלקטרוני.
  • אתה מפעיל את Microsoft Exchange 2000 Server Service Pack 3 ?(SP3) עם גירסה 6619.4 של קובץ היישום Store.exe או עם גירסה מתקדמת יותר. הגירסה 6619.4 הפכה לראשונה לזמינה במאמר שלהלן מתוך מאגר הידע Microsoft Knowledge Base:
    915358 קיים תיקון חם לשינוי אופן הפעולה של ההרשאה Full mailbox access ב-Exchange 2000 Server
  • אתה מפעיל את Microsoft Exchange Server 2003 Service Pack 1 ?(SP1) עם גירסה 7233.51 של קובץ היישום Store.exe או עם גירסה מתקדמת יותר. הגירסה 7233.51 הפכה לראשונה לזמינה במאמר שלהלן מתוך מאגר הידע Microsoft Knowledge Base:
    895949 שינוי אופן הפעולה של הרשאת 'שלח כ' ב-Exchange 2003?
    שים לב כי תיקון זה אינו כלול ב-Microsoft Exchange 2003 Service Pack 2 ?(SP2). אם התקנת את גירסת Exchange Server 2003 SP1 של תיקון חם זה, עליך להתקין את גירסת Service Pack 2 לאחר שדרוג ל-Service Pack 2.
  • אתה מפעיל את Exchange Server 2003 SP2? עם גירסה 7650.23 של קובץ היישום Store.exe או עם גירסה מתקדמת יותר. הגירסה 7650.23 הפכה לראשונה לזמינה במאמר שלהלן מתוך מאגר הידע Microsoft Knowledge Base:
    895949 שינוי אופן הפעולה של הרשאת 'שלח כ' ב-Exchange 2003?
    שים לב שינוי זה לא נכלל ב-Exchange 2000 Server SP3,? Exchange Server 2003 SP1 או ב-Exchange 2003 SP2. שינוי זה יושם לאחר פרסום כל מהדורות service pack אלה, אך הוא נתמך בכל אחת מהן. שינוי זה ייכלל במהדורות service pack עתידיות למוצרים אלה.

    בעת התקנת Exchange Server 2003 SP2, עליך להתקין את העדכון הנוסף כדי לשמר את אופן הפעולה החדש, גם אם גירסת העדכון עבור Exchange Server 2003 SP1 הותקנה כבר.

פתרון הבעיה

לפני פרסום הגירסות של קובץ היישום Store.exe המנויות בסעיף 'סיבה', הענקת ההרשאה Full Mailbox Access העניקה באופן עקיף גם את ההרשאה לשלוח כבעלים של תיבת הדואר. פירוש הדבר כי חשבון אחר, בעל ההרשאה Full Mailbox Access, יכול היה לשלוח הודעות דואר אלקטרוני שהופיעו כאילו נשלחו על-ידי הבעלים של תיבת הדואר.

לקוחות רבים של Microsoft Exchange ביקשו כי הרשאת 'שלח כ' תופרד מההרשאה Full Mailbox Access משתי הסיבות שלהלן:
  • להרתיע מפני התחזות בדואר אלקטרוני.
  • להבטיח כי תמיד ניתן יהיה להבדיל בין הודעות דואר אלקטרוני הנשלחות על-ידי נציג לבין אלה הנשלחות על-ידי הבעלים של תיבת הדואר בעצמו.
כל הגירסות החדשות של מאגר המידע של Exchange יחייבו מעתה לקבל במפורש את הרשאת 'שלח כ' כדי לשלוח הודעות דואר אלקטרוני כבעלים של תיבת הדואר. עם זאת, להלן שלושה יוצאים מן הכלל לדרישה זו:
  • חשבון הבעלים של תיבת הדואר אינו מחייב הרשאת 'שלח כ' מפורשת עבור תיבת הדואר שלו עצמו.
  • החשבון החיצוני המשויך לתיבת דואר אינו מחייב הרשאת 'שלח כ' מפורשת.
  • חשבון נציג שהוא גם בעל ההרשאה Full Mailbox Access אינו מחייב הרשאת 'שלח כ' מפורשת.
לקבלת פרטים נוספים על יוצאים מן הכלל אלה, עיין בסעיף 'מידע נוסף'.

כל החשבונות האחרים, להם הוענקה גישה חלקית או מלאה לתיבת דואר, חייבים עתה לקבל באופן מפורש את הרשאת 'שלח כ' עבור חשבון הבעלים של תיבת הדואר על מנת לשלוח דואר כבעלים של תיבת הדואר. הדבר כולל את חשבונות השירות של יישומים המבצעים פונקציות כגון שליחת הודעות דואר אלקטרוני עבור משתמשים בהתקנים ניידים.

יש להעניק את הרשאת 'שלח כ' לחשבון השירות בכל אובייקט משתמש שהוא הבעלים של תיבת דואר. לא ניתן להעניק את הרשאת 'שלח כ' בשרת Exchange או באובייקט של מסד נתונים ולהשיג את האפקט של הענקת הרשאת 'שלח כ' לכל תיבות הדואר במסד הנתונים.

אופן פעולה זה מתרחש מכיוון שהרשאת 'שלח כ' היא הרשאה של Active Directory המיושמת על אובייקטים של Active Directory, שעבורם הוגדרה. הענקת הרשאת 'שלח כ' באובייקט מסד נתונים של Exchange מעניקה לך הרשאת 'שלח כ' למסד הנתונים עצמו. אולם היא אינה מעניקה לך את ההרשאה עבור המשתמשים בעלי הרשאת 'שלח כ' שיש להם תיבות דואר במסד הנתונים.

הערה הענקת ההרשאה Receive As במסד נתונים של Exchange היא שוות ערך מבחינה פונקציונאלית להענקת ההרשאה Full Mailbox Access לכל תיבות הדואר במסד הנתונים. הדבר שונה מאופן הפעולה של הרשאת 'שלח כ'.

בהרשאת 'שלח כ', ההרשאה חלה רק על אובייקט מסד הנתונים עצמו. היא אינה חלה על תיבות הדואר במסד הנתונים. בהרשאה Receive As, ההרשאה נראית כאילו עברה בירושה לכל תיבות הדואר במסד הנתונים.

כדי להבין טוב יותר את ההבדל בין שתי ההרשאות, חשוב על כל תיבות הדואר במסד נתונים כאילו היו תיקיות בתיבת דואר אחת (תיבת הדואר 'מסד הנתונים'). אם יש לך גישה מלאה למסד הנתונים, יש לך הרשאה לקבל גישה לכל התוכן של מסד הנתונים. הדבר כולל את כל תיבות הדואר.

הרשאת 'שלח כ' חלה על הזהות של אובייקט משתמש של Active Directory, לא על תוכן של תיבות דואר המאוחסן במסד נתונים. כאשר נשלחות הודעות דואר אלקטרוני, הן אינן נשלחות מתיבת דואר מסוימת או ממסד נתונים מסוים, אלא ממשתמש. המשתמש עשוי להיות הבעלים של תיבת הדואר או כל חשבון אחר בעל הרשאת 'שלח כ'.

כדי להעניק לחשבון אחר באופן מפורש את ההרשאה לשלוח בתור הבעלים של תיבת הדואר, בצע את הפעולות הבאות:
  1. הפעל את מסוף הניהול Active Directory Users and Computers.
  2. בתפריט View (תצוגה), ודא כי האפשרות Advanced Features (תכונות מתקדמות) מסומנת. אם אפשרות זו אינה מסומנת, הדף Security (אבטחה) יהיה מוסתר עבור אובייקטים של חשבונות משתמשים.
  3. פתח את המאפיינים של חשבון המשתמש שהוא הבעלים של תיבת הדואר.
  4. לחץ על הכרטיסייה Security (אבטחה).
  5. אם החשבון אינו מופיע עדיין ברשימה של שמות הקבוצות או שמות המשתמשים, הוסף את החשבון לו יש להעניק את הרשאת 'שלח כ' עבור משתמש זה.
  6. בתיבה Permissions (הרשאות), לחץ על ההרשאה Allow for the ?Send As?? (אפשר 'שלח כ') עבור החשבון המתאים.
  7. לחץ על אישור.
  8. הפעל מחדש את שירות Microsoft Exchange Information Store בשרת Exchange המושפע.
שים לב אם לא תפעיל מחדש את שירות Microsoft Exchange Information Store, השירות Microsoft Exchange Information Store יעדכן את מטמון ההרשאות שלו על מנת שההרשאות החדשות יהיו בתוקף בהתאם לערך שנקבע במפתח המשנה הבא של הרישום:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem


שם ערך: Mailbox Cache Age Limit
סוג ערך: REG_DWORD
Radix: עשרוני
נתוני ערך: מגבלת גיל מטמון פרטי תיבת הדואר בדקות.
ערך ברירת המחדל עבור ערך רישום זה הוא 120 דקות (שעתיים). אם תשנה את ערך רישום זה, עליך להפעיל מחדש את שירות Microsoft Exchange Information Store.

שים לב אם תגדיר את ערכי פסק-הזמן לערך נמוך ביותר, אתה עלול להשפיע על ביצועי השרת.

כיצד להעניק את הרשאת 'שלח כ' עבור חשבונות מרובים

בסוף מאמר זה מובא script לדוגמה שיחפש תחום שירות של תיקיית Active Directory עבור חשבונות בעלי ההרשאה Full Mailbox Access וללא הרשאת 'שלח כ' עבור תיבת דואר. אלה הם המאפיינים של חשבון שירות או חשבון משאבים שיושפע משינוי אבטחה זה. באפשרות ה-script ליצור קובץ ייצוא בו תוכל לעיין ושאותו תוכל לשנות ולאחר מכן לייבא מחדש כדי להעניק את הרשאת 'שלח כ' לחשבונות להם נחוצה הרשאה זו.

באפשרותך להעניק את הרשאת 'שלח כ' גם על-ידי העברה בירושה בכל אובייקט משתמש בתחום או בגורם מכיל של Active Directory. הענקת הרשאת 'שלח כ' בשיטה זו עלולה לגרום להענקתה גם לאובייקטים להם לא הייתה לך כוונה להעניק אותה. בנוסף, ההרשאה עבור אובייקטים המועברים מן הגורם המכיל עלולה ללכת לאיבוד. משום כך שיטה זו אינה מועדפת ועלולות להיות לה השלכות אבטחה אותן יש לשקול בזהירות לפני השימוש בה.

כדי להעניק את הרשאת 'שלח כ' לחשבון יחיד בכל חשבונות המשתמשים בתחום או בגורם מכיל של Active Directory, בצע את הפעולות הבאות:
  1. הפעל את מסוף הניהול Active Directory Users and Computers.
  2. בתפריט View (תצוגה), ודא כי האפשרות Advanced Features (תכונות מתקדמות) מסומנת. אם אפשרות זו אינה מסומנת, הדף Security (אבטחה) יהיה מוסתר עבור אובייקטים של תחום ושל גורם מכיל.
  3. פתח את המאפיינים של התחום ושל הגורם המכיל ולאחר מכן לחץ על הדף Security (אבטחה).
  4. לחץ על הלחצן Advanced (מתקדם).
  5. אם החשבון לו נחוצה ההרשאה אינו מוצג עדיין, לחץ על Add (הוספה) ולאחר מכן בחר את החשבון. לחלופין, לחץ פעמיים על החשבון כדי לערוך אותו.
  6. ברשימה Applies Onto (חל על), לחץ על User Objects (אובייקטי משתמש).
  7. הענק לחשבון את הרשאת 'שלח כ'.
  8. לחץ על אישור עד ליציאה ולשמירת כל השינויים.
שים לב קובץ ה-Script המתואר בסוף המאמר מביא בחשבון הרשאות שעברו בירושה. משום כך, הענקת הרשאת 'שלח כ' באמצעות שיטה זו תגרום להפיכת החשבונות עם הרשאת 'שלח כ' שעברה בירושה לבלתי נראים לקובץ ה-script. כדי לעבד חשבונות אלה מאוחר יותר עם ה-script, יש להסיר תחילה את ההרשאה 'שלח כ' שעברה בירושה.

כללים מיוחדים עבור חשבונות מוגנים על-ידי adminSDHolder

שימוש ב-script כדי להעניק את ההרשאה 'שלח כ' לבעלים של תיבת דואר שהוא גם מנהל תחום יגרום להפיכת ההרשאה 'שלח כ' לבלתי אפקטיבית. מומלץ בחום שלא להפעיל את תיבת הדואר עבור חשבונות משתמשים בעלי זכויות של מנהלי תחום או שהם מוגנים באמצעות adminSDHolder.

האובייקט adminSDHolder הוא תבנית עבור חשבונות בעלי זכויות ניהול נרחבות של Active Directory. כדי למנוע העלאה בלתי מכוונת של הרשאות, כל חשבון המוגן באמצעות האובייקט adminSDHolder חייב להיות בעל זכויות גישה התואמות את אלה המוצגות באובייקט adminSDHolder עצמו.

שינוי הזכויות או ההרשאות באובייקט adminSDHolder עבור חשבון מוגן יגרום לביטול השינוי על-ידי משימה ברקע בתוך דקות אחדות. לדוגמה, הענקת הרשאת 'שלח כ' באובייקט מנהל תחום עבור חשבון שירות יישום תגרום לשלילת ההרשאה באופן אוטומטי על-ידי משימה ברקע.

משום כך, אין אפשרות להעניק הרשאת 'שלח כ' לחשבון שירות יישום עבור חשבון המוגן על-ידי האובייקט adminSDHolder אלא אם כן שונה האובייקט adminSDHolder עצמו. שינוי האובייקט adminSDHolder יגרום לשינוי הרשאות הגישה עבור כל החשבונות המוגנים. יש לשנות את האובייקט adminSDHolder רק לאחר בדיקה מעמיקה של השלכות האבטחה העלולות לנבוע מהשינוי.

כדי לקשר תיבת דואר לחשבון המוגן על-ידי האובייקט adminSDHolder, בצע את הפעולות הבאות:
  1. הפעל את מסוף הניהול Active Directory Users and Computers.
  2. בתפריט View (תצוגה), ודא כי האפשרות Advanced Features (תכונות מתקדמות) מסומנת. אם אפשרות זו אינה מסומנת, הדף Security (אבטחה) יהיה מוסתר עבור אובייקטים של חשבונות משתמשים.
  3. צור חשבון משתמש רגיל כדי לפעול כבעלים של תיבת הדואר.
  4. הקצה לחשבון המשתמש הרגיל תיבת דואר בשרת Exchange.
  5. פתח את המאפיינים של חשבון הבעלים של תיבת הדואר החדשה.
  6. בתיבה Exchange Advanced הענק את ההרשאה Full Mailbox Access לחשבון המנהל המוגן.
  7. בדף Security (אבטחה) הענק את הרשאת 'שלח כ' לחשבון המנהל המוגן.
  8. לחץ על אישור כדי לצאת מהמאפיינים של אובייקט הבעלים של תיבת הדואר.
  9. לחץ באמצעות לחצן העכבר הימני על אובייקט החשבון של הבעלים של תיבת הדואר ולאחר מכן לחץ על Disable Account (הפוך חשבון ללא זמין) כדי לבטל את החשבון עבור כל הכניסות.
לקבלת מידע נוסף על חשבונות המוגנים באמצעות adminSDHolder, לחץ על מספרי המאמרים שלהלן כדי להציגם מתוך מאגר הידע Microsoft Knowledge Base:
907434 הזכות 'שלח כ' מוסרת מאובייקט משתמש לאחר הגדרת תצורתה ביישום ה-snap-in?: Active Directory Users and Computers ב-Exchange Server (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)
318180 הליך משנה של AdminSDHolder משפיע על חברים ארעיים בקבוצות הפצה (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)
817433 הרשאות שהוקצו אינן זמינות והעברה בירושה מושבתת באופן אוטומטי (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)
306398 אובייקט של AdminSDHolder משפיע על הקצאת פיקוח עבור חשבונות מנהלים מן העבר (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)

משימות מיוחדות עבור BlackBerry Enterprise Server

משימה 1: בדיקה אם BlackBerry Enterprise Server פועל כחשבון נפרד ייחודי

ודא כי BlackBerry Enterprise Server פועל כחשבון נפרד, שנוצר במיוחד עבור משימות ניהוליות. כברירת מחדל, חשבון זה נקרא BESAdmin.

אם ברשותך חשבון נפרד לניהול BlackBerry Enterprise Server, עבור למשימה 2.

אם אין ברשותך חשבון נפרד, צור אותו. לאחר מכן השתמש בחשבון זה כדי לבצע משימות ניהוליות. לקבלת הוראות על אופן ביצוע הדבר, בקר באחד מאתרי האינטרנט הבאים של BlackBerry, בהתאם לגירסת BlackBerry Enterprise Server שאתה מפעיל.

אם אתה מפעיל את גירסה 4.0 או את גירסה 4.1 של BlackBerry Enterprise Server, בקר באתר האינטרנט הבא של BlackBerry:
http://www.blackberry.com/btsc/search.do?cmd=displayKC&docType=kc&externalId=9174704&sliceId=&dialogID=11024244&stateId=1 0 11020632
אם אתה מפעיל BlackBerry Enterprise Server 3.6, בקר באתר האינטרנט הבא של BlackBerry:
http://www.blackberry.com/btsc/search.do?cmd=displayKC&docType=kc&externalId=KB04334&sliceId=SAL_Public&dialogID=11016727&stateId=1 0 11020358

Task 2: בדיקה אם חשבון השירות BlackBerry Enterprise Server הוא בעל ההרשאות הנכונות

ודא כי חשבון השירות BlackBerry Enterprise Server הוא בעל ההרשאות הנכונות.

שים לב כאשר החשבון נמצא בתחום, ודא שהחשבון חבר בקבוצה Domain Users בלבד. בבקר תחום, החשבון אמור להיות חבר בקבוצה Built-in Administrators.
  1. ב-BlackBerry Enterprise Server, בצע את הפעולות הבאות:
    1. ודא כי החשבון הוא חבר בקבוצה Local Administrators.
    2. הקצה לחשבון את ההרשאות 'כניסה מקומית' וכן 'כניסה כשירות'.
  2. הענק את ההרשאות Exchange View-Only Administrator ברמת הקבוצה הניהולית. לשם כך, בצע את השלבים הבאים:
    1. ב-Exchange System Manager, לחץ באמצעות לחצן העכבר הימני על השם הראשון של קבוצה ניהולית של Exchange Server ולאחר מכן לחץ על Delegate Control (הקצאת שליטה).
    2. שים לב כי חשבון השירות BlackBerry Enterprise Server מופיע כבעל התפקיד Exchange View-Only Administrator.
  3. הענק את ההרשאות שלח כ', 'קבלה בשם' ו-Administer Information Store ברמת השרת עבור כל שרת Exchange Server. לשם כך, בצע את השלבים הבאים:
    1. ב-Exchange System Manager, לחץ באמצעות לחצן העכבר הימני על השם הראשון של קבוצה ניהולית של Exchange Server ולאחר מכן הרחב את הקבוצה Servers.
    2. לחץ באמצעות לחצן העכבר הימני על שרת Exchange Server, לחץ על מאפיינים ולאחר מכן לחץ על אבטחה.
    3. בחלונית העליונה, בחר חשבון השירות BlackBerry Enterprise Server. בחלונית התחתונה, ודא כי ההרשאות 'שלח כ', 'קבלה בשם' וכן Administer Information Store נקבעו לאפשר.
    4. חזור על פעולות 3b וכן 3c עבור כל שרת Exchange Server.
  4. הענק את ההרשאות 'שלח כ', 'קבלה בשם' וכן Administer Information Store למאגר תיבות הדואר. לשם כך, בצע את השלבים הבאים:
    1. ב-Exchange System Manager, לחץ באמצעות לחצן העכבר הימני על השם הראשון של קבוצה ניהולית של Exchange ולאחר מכן הרחב את הקבוצה Servers.
    2. הרחב את הקבוצה הראשונה של מאגר תיבות הדואר, לחץ באמצעות לחצן העכבר הימני על כל אחד ממאגרי תיבות הדואר, לחץ על מאפיינים ולאחר מכן על אבטחה.
    3. בחלונית העליונה, בחר חשבון השירות BlackBerry Enterprise Server. בחלונית התחתונה, ודא כי ההרשאות 'שלח כ', 'קבלה בשם' וכן Administer Information Store נקבעו לאפשר.
    4. חזור על הפעולות 4b וכן 4c עבור כל אחד ממאגרי תיבות הדואר בכל שרת Exchange Server.
  5. ביישום ה-Snap-in ששמו Active Directory Users and Computers, בצע את הפעולות הבאות:
    1. לחץ באמצעות לחצן העכבר הימני על המשתמש שעבורו ברצונך להוסיף הרשאות ולאחר מכן לחץ על מאפיינים.
    2. בכרטיסייה אבטחה, הוסף את חשבון השירות BlackBerry Enterprise Server ולאחר מכן סמן את התיבה שלח כ.
אם אינך מפעיל את Exchange Server 2003, ראה משימה 3.

משימה 3: ניקוי זיכרון המטמון ב-BlackBerry Enterprise Server

כדי לנקות את מטמון ההרשאות ב-Information Store, הפעל מחדש את השירותים הקשורים ל-Blackberry ואת Microsoft Exchange Information store. לאחר ההפעלה מחדש של ה-Information Store, עליך להפעיל מחדש את השירותים הקשורים ל-RIM Blackberry כדי להעניק לחשבון BESAdmin את ההרשאה 'שלח כ' החדשה שנוספה ב-Exchange Information Store.

לקבלת מידע נוסף על דרישות ספציפיות עבור שרת ה-Blackberry, בקר באתר האינטרנט הבא של BlackBerry:
http://www.blackberry.com/btsc/search.do?cmd=displayKC&docType=kc&externalId=KB04707&sliceId=SAL_Public&dialogID=3016166&stateId=0%200%202441763

מידע נוסף

הרשאות הגישה לתיבת הדואר ולתיקיות ב-Exchange מפוצלות בין מסדי הנתונים של Active Directory ושל Microsoft Exchange. עם זאת, שני סוגי ההרשאות נקבעים במסוף ניהול המשתמשים של Active Directory, אך הרשאות שונות מאוחסנות בשני מיקומים נפרדים.

באופן כללי, אם בדף Security (אבטחה) נקבעת הרשאה עבור אובייקט כלשהו, זוהי הרשאה של Active Directory. אם היא נקבעת בדף Exchange Advanced Mailbox Rights, זוהי הרשאת מסד נתונים של Exchange. משום כך, אם תנסה לגשת לדף Mailbox Rights כאשר מסד הנתונים של משתמש כלשהו אינו זמין, תקבל את הודעת השגיאה הבאה:
The Microsoft Information Store service is unavailable.
ההרשאה Associated External Account חורגת מן הכלל הקובע כי הרשאות המוענקות באמצעות Exchange Advanced Mailbox Rights מאוחסנות במסד הנתונים של Exchange. ההרשאה Associated External Account אף אינה הרשאה אמיתית אלא אמצעי שנועד להגדיר את התכונה msExchMasterAccountSID של Active Directory. התכונה msExchMasterAccountSID, אף כי אינה הרשאה בפני עצמה, מפקחת על אופן הפעולה של הרשאות אחרות. לקבלת פרטים נוספים על התכונה msExchMasterAccountSID, עיין בסעיף 'חשבונות חיצוניים מקושרים'.

הערה התכונה msExchMailboxSecurityDescriptor של Active Directory היא עותק גיבוי של של קבוצת משנה של הזכויות האפקטיביות של תיבת הדואר. נעשה בה שימוש פנימי על-ידי Exchange למגוון מטרות. בנוסף, התכונה msExchMailboxSecurityDescriptor מתעדכנת כדי שתתאים לזכויות האפקטיביות הנוכחיות אם המנהלים משתמשים בממשקים נתמכים כדי להקצות זכויות.

עם זאת, אם התכונה msExchMailboxSecurityDescriptor משתנה על-ידי מנהל, השינויים לא יופצו למאגר Exchange ולא ייכנסו לתוקף. אין כל ביטחון שהם יסונכרנו עם הזכויות בפועל של תיבת הדואר. אין להשתמש בתכונה msExchMailboxSecurityDescriptor כדי לקרוא או לכתוב זכויות של תיבת דואר.

לקבלת מידע נוסף, לחץ על מספר המאמר שלהלן כדי להציגו מתוך מאגר הידע Microsoft Knowledge Base:
310866 כיצד לקבוע זכויות תיבת דואר של Exchange Server 2003 ושל Exchange 2000 Server בתיבת דואר קיימת במאגר המידע (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)

ההרשאה Full Mailbox Access היא הרשאה של מאגר מסדי נתונים של Exchange. הרשאת 'שלח כ' היא הרשאה של Active Directory. לפני השינויים בקובץ היישום Store.exe ב-Exchange המתוארים במאמר זה, לא בדקה מערכת Exchange את ההגדרה עבור הרשאת 'שלח כ' אם לשולח הייתה כבר ההרשאה Full Mailbox Access.

שים לב ניתן להעניק את הרשאת 'שלח כ' מבלי להעניק את ההרשאה Full Mailbox Access. במצבים מעין אלה, מערכת Exchange תמיד בדקה את הרשאת 'שלח כ'.

הכללתה של הרשאת 'שלח כ' בהרשאה Full Mailbox Access אפשרה למנהלי שרתים של Exchange להעניק לעצמם הרשאות 'שלח כ' אפקטיביות עבור כל תיבת דואר בשרת שאותו הם ניהלו. מנהלי מערכת יכולים לבצע פעולה זו מכיוון שלמנהלים יש שליטה מלאה על מסד הנתונים של Exchange. הואיל והרשאת 'שלח כ' היא הרשאה של Active Directory ולא של מאגר Exchange, יכולים עתה מנהלי Active Directory לחסום תהליך זה על-ידי הפרדת הרשאת 'שלח כ' מההרשאה Full Mailbox Access. משום כך, התהליך אינו בהכרח בשליטתם של מנהלי מערכת Exchange.

בעלים של תיבות דואר

בעלים של תיבת דואר מוגדר כחשבון משתמש של Active Directory שהתכונה msExchMailboxGUID שלו נושאת את המזהה הספרתי הייחודי הגלובלי (GUID) עבור תיבת דואר מסוימת. רק לחשבון אחד מתוך יער שלם מותר לשאת את ה-GUID עבור תיבת דואר מסוימת. ניסיון להגדיר בעלים נוספים עם אותו GUID יגרום ל-Active Directory לדחות את השינוי עם שגיאה.

בעת הפעלת תיבת דואר-של חשבון או בעת חיבור תיבת דואר מנותקת לחשבון של Active Directory, המזהה GUID של תיבת הדואר נקבע באופן אוטומטי באותו חשבון. רק לעתים רחוקות נחוץ או מומלץ שמנהלי מערכת יגדירו מזהי GUID של תיבת דואר באופן ישיר.

חשבונות חיצוניים מקושרים

תצורה נפוצה של Exchange היא התקנת Exchange ביער משאבים. יער משאבים הוא יער הנמצא ביער שונה מזה של חשבונות המשתמשים להם יהיו תיבות דואר במערכת. הדבר מציב בעיה מכיוון שהתכונה msExchMailboxGUID ניתנת להגדרה רק באובייקטים באותו יער של שרת Exchange.

הפתרון לבעיה זו הוא לאפשר הפעלת תיבת דואר בחשבון שביער של שרת Exchange. לאחר מכן מקשרים חשבון זה, בו הופעלה אפשרות תיבת דואר, לחשבון ביער אחר או בתחום של Microsoft Windows NT 4. ניתן לבצע זאת על-ידי הענקה של הרשאת החשבון החיצוני המקושר Associated External Account. ניתן להעניק את ההרשאה Associated External Account רק לחשבון אחד. החשבון הנבחר חייב להיות מיער שונה.

בעת הגדרת ההרשאה Associated External Account, נכתב הערך SID עבור החשבון החיצוני לתכונה msExchMasterAccountSID של הבעלים של תיבת הדואר. משום כך, אין זו כלל הרשאה אלא אמצעי נוח לפיקוח על הערך של התכונה msExchMasterAccountSID. לאחר הגדרת התכונה msExchMasterAccountSID, החשבון החיצוני לו שייך הערך SID יקבל זכות גישה ל-Exchange כאילו הוא היה בפועל חשבון הבעלים של תיבת הדואר.

שים לב כי הדבר חל רק על גישה ל-Exchange ולא על הגישה ל-Active Directory בכללותה. בנוסף, יש לסמן את חשבון הבעלים של תיבת הדואר כ'לא זמין' עבור כניסות לאחר הגדרת ההרשאה Associated External Account, כך שכל ההרשאות יפעלו כצפוי.
300456 הרשאות ונציגויות לקוחות אינן נמשכות לאחר הקצאתן ב-Exchange 2000 (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)

תרחישי נציגות

נציג הוא משתמש שהוענקה לו גישה חלקית לתיבת דואר אחרת והזכות לשלוח הודעות דואר אלקטרוני בשם הבעלים של אותה תיבת דואר. תרחיש נציגות נפוץ הוא להעניק גישת נציג לעוזר מנהל עבור לוח השנה של המנהל. בדרך כלל, באפשרות הנציג לקרוא בלוח השנה ולעדכן אותו. בנוסף יכול הנציג לענות להודעות דואר אלקטרוני בשם המנהל.

גישת נציג מוענקת על-ידי הוספת הנציג לתכונה מרובת-הערכים publicDelegates של הבעלים של תיבת הדואר. כל המשתמשים הרשומים בתכונה זו הם בעלי ההרשאה 'שלח בשם' עבור הבעלים של תיבת הדואר. בעת שנציגים כאלה שולחים הודעת דואר אלקטרוני בה מופיע שם הבעלים בתיבה מאת, מציגה התיבה מאת של הודעת הדואר האלקטרוני את הערך הבא:
<שם הנציג> בשם <הבעלים של תיבת הדואר>
עם זאת, הודעת הדואר האלקטרוני נשלחת מהנציג ולא מהבעלים או כבעלים של תיבת הדואר.

להלן רשימה של שני הממשקים בהם ניתן להשתמש כדי להעניק את הרשאת 'שלח בשם' ואת הרשאת הנציגות delegate:
  • באובייקט הבעלים של תיבת הדואר, הענק את ההרשאה 'שלח בשם' בתיבת הדו-שיח Exchange General.
  • בתוכנית Microsoft Outlook, השתמש בתיבת הדו-שיח נציגים.
שתי השיטות גם יחד מגדירות את התכונה publicDelegates. עם זאת, שיטת Outlook מאפשרת גם הענקת הרשאות מיוחדות לתיקיות עבור הנציג. באפשרותך גם להעניק הרשאות לנציג ישירות מן המאפיינים של תיקייה בודדת ב-Outlook.

במקרים מסוימים, ייתכן שלא יהיה באפשרותך להגדיר את התכונה publicDelegates ב-Outlook.
329622 הרשאת 'שלח בשם' אינה מוקצית למשתמש לאחר האצלת זכויות גישה ב-Outlook (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)

מתן גישת נציג לתיבת דואר מאפשר לנציג להשתמש בהרשאת 'שלח בשם' גם מבלי שניתנה לו גישה לאף אחת מהתיקיות של תיבת הדואר. ההרשאה הבסיסית שיש לנציג היא ההרשאה 'שלח בשם'. הרשאות הגישה לתיקיות של תיבת הדואר הן נפרדות ויש להעניק אותן בנוסף להרשאות הנציגות.

בדרך כלל, נציגים ישתמשו ב-Microsoft Outlook כדי לקבל גישה לתיקיות בודדות אליהן ניתנה להם גישה. ניתן לעשות זאת על-ידי לחיצה על פתח בתפריט קובץ של Outlook ולאחר מכן לחיצה על תיקיה של משתמש אחר.

לחלופין, באפשרות הנציגים לפתוח את תיבת הדואר שלך על-ידי הכנסתה כתיבת דואר נוספת בכרטיסייה מתקדם של פרופילי Outlook שלהם. שיטה זו גורמת לכך שתיבת הדואר שלך מוצגת בעץ התיקיות של Outlook אצל הנציג. בנוסף, שיטה זו מאפשרת גישה לכל התיקיות בתיבת הדואר שלך עבורן ניתנו לנציג הרשאות.

לעתים רצוי שהנציג יהיה בעל ההרשאה 'שלח בשם' ולעתים שיהיה בעל ההרשאה 'שלח כ'. כדי להגדיר נציג עם שתי הרשאות אלה, בצע את הפעולות הבאות:
  • הענק לנציג את ההרשאה Full Mailbox Access. לא ניתן לבצע זאת דרך Outlook. במקום זאת, מנהל של Active Directory חייב לבצע זאת בחשבון הבעלים של תיבת הדואר. אפילו הענקת הרשאות בעלים בכל אחת מתיקיות תיבת הדואר אינה דומה להענקת ההרשאה Full Mailbox Access.
  • אל תעניק לנציג את הרשאת 'שלח כ'. אם תעניק לנציג את הרשאת 'שלח כ', כל הודעות הדואר האלקטרוני הנשלחות על-ידי הנציג יישלחו בעזרת ההרשאה 'שלח כ'. לנציג לא תהיה עוד אפשרות להשתמש בהרשאה 'שלח בשם'.
בתרחיש מעין זה, נציג שברצונו להשתמש בהרשאה 'שלח בשם' חייב להיכנס לתיבת הדואר שלו. אם הנציגים עונים להודעת דואר אלקטרוני הנמצאת כבר באחת התיקיות שלך או מעבירים אותה, הודעת הדואר האלקטרוני תישלח באופן אוטומטי בשמך. אם הנציגים יוצרים הודעת דואר אלקטרוני חדשה בשמך, עליהם להזין את שמך בתיבה מאת על מנת שהודעת הדואר האלקטרוני תישלח בשמך.

ללא קשר לעובדה כי הנציגים פתחו את התיקיות שלך או את כל תיבת הדואר שלך כתיבת דואר משנית, כל הודעות הדואר האלקטרוני שהם שולחים בשמך יעשו שימוש בהרשאת 'שלח בשם', כל עוד תיבת הדואר שלהם היא העיקרית עבור פרופיל Outlook הנוכחי.

כאשר נציג רוצה לשלוח הודעת דואר אלקטרוני בשמך, עליו להיכנס לתיבת הדואר שלך עם פרופיל Outlook נפרד הפותח רק את תיבת הדואר שלך. הודעות דואר אלקטרוני ששולחים נציגים שנכנסו לפרופיל זה יישלחו באופן אוטומטי בשמך.

איתור חשבונות בעלי ההרשאה Full Mailbox Access ללא הרשאת 'שלח כ'

ה-script לדוגמה המתואר בסעיף זה יכול לחפש בתחום Active Directory יחיד בזמן נתון אחר חשבונות בהם ההרשאה Full Mailbox Access הוענקה לתיבת דואר ללא הרשאת 'שלח כ'.

חשוב לפני שינוי ההרשאות, עיין בסעיף על בעלים של תיבות דואר שיש להם נציגים.

ל-script שלושת המצבים הבאים:
  • Export (ייצוא): באפשרותך להפיק רשימת משתמשים בעלי ההרשאה Full Mailbox Access אך ללא הרשאת 'שלח כ'. לאחר מכן באפשרותך לעיין ברשימה באמצעות 'פנקס הרשימות' או תוכנית עריכה אחרת כדי להסיר חשבונות שאין ברצונך שיהיו בעלי הרשאת 'שלח כ'.
  • Import (ייבוא): באפשרותך להפיק רשימת משתמשים בעלי ההרשאה Full Mailbox Access להם יש להעניק גם את הרשאת 'שלח כ'. שים לב כי אין באפשרותך להשתמש ב-script זה כדי להעניק את שתי ההרשאות, Full Mailbox Access ו'שלח כ', גם יחד. כל אחד מהחשבונות חייב להיות כבר בעל ההרשאה Full Mailbox Access על מנת לקבל את הרשאת 'שלח כ'.
  • SetAll (הגדר הכול): באפשרותך להעניק את הרשאת 'שלח כ' לכל המשתמשים בתחום שהם כבר בעלי ההרשאה Full Mailbox Access עבור תיבת דואר מסוימת. ייווצר קובץ רישום יומן בתבנית דומה לזו של הקובץ הנוצר באפשרות 'Export' (ייצוא). אפשרות זו זהה להפעלת המצבים Export (ייצוא) ו-Import (ייבוא) ללא שינוי הקובץ Export (ייצוא).
שים לב ב-script זה אין אפשרות של ביטול פעולה.

הרשאות הדרושות עבור ה-script

עליך להפעיל את ה-script כשאתה מחובר בחשבון ניהולי השייך לאותו יער אליו שייכים חשבונות הבעלים של תיבת הדואר. ה-script עלול שלא לפעול עם חשבון בעל הרשאות ניהוליות על פני יערות. ה-script עלול גם לא לפעול אם מפעילים אותו מתחנת עבודה המצורפת ליער שונה מזה שאליו צורפו חשבונות הבעלים של תיבות הדואר.

בהינתן תנאים אלה, יש באפשרותך להפעיל את ה-script עם מספר חשבונות ניהוליים בהפעלת כניסה יחידה באמצעות הפקודה RunAs.exe. נוהל זה עשוי להיות מועיל כאשר ברשותך הרשאות של Active Directory ושל Exchange Server מחולקות למקטעים ואין ברשותך אף לא חשבון אחד שבאפשרותו לנהל את כל שרתי Exchange או את כל תחומי Active Directory. באפשרותך לפתוח שורת פקודה כדי להפעיל את ה-script כמו כל חשבון ניהולי. חשוב על הדוגמה הבאה:
RunAs.exe /user:domain\account CMD.EXE
שים לב אין להפעיל מספר עותקים של ה-script בזמן נתון מול אותו תחום.

השדות הנמצאים בקובץ הייצוא הם כלהלן. השדות מתוארים בסדר בו הם מוצגים בקובץ הייצוא.
  • שם התצוגה של חשבון הבעלים של תיבת הדואר

    ייתכן שקובץ הפלט יכלול יותר משורה אחת המציינת את אותו הבעלים של תיבת דואר. אופן פעולה זה מתרחש כאשר מספר חשבונות אחרים הם בעלי ההרשאה Full Mailbox Access לאותה תיבת דואר.
  • תחום ושם כניסה של חשבון בעל ההרשאות Full Mailbox Access אך לא בעל ההרשאה 'שלח כ'.

    אותו חשבון עשוי להופיע מספר פעמים בקובץ הייצוא כאשר לחשבון יש גישה למספר תיבות דואר. זהו מקרה שכיח עבור חשבון שירות יישום או עבור אדם המנהל מספר תיבות דואר של משאבים.
  • שם התצוגה של חשבון בעל ההרשאה Full Mailbox Access אך לא בעל ההרשאה 'שלח כ'

    שדה זה ניתן בנוסף לשדה Logon Name כדי להקל עליך בזיהוי החשבון.
  • סטטוס הנציג של בעלי תיבת הדואר

    אם לבעלי תיבת הדואר יש נציגים, ערך השדה הוא Has Delegates. אם לבעלי תיבת הדואר אין נציגים, ערך השדה הוא No Delegates.
  • סטטוס מופעל או מושבת של חשבון הבעלים של תיבת הדואר

    שדה זה מועיל כאשר רוצים לזהות חשבונות משאבים או חשבונות תיבות דואר על פני יערות. בדרך כלל, חשבונות אלה מושבתים.
  • שם ייחודי מלא של חשבון הבעלים של תיבת הדואר

    שדה זה מועיל כאשר רוצים לזהות את התחום ואת הגורם המכיל של חשבון הבעלים של תיבת הדואר.
  • שם ייחודי מלא למסד הנתונים של תיבת הדואר של הבעלים

    שדה זה כולל את מסד הנתונים, קבוצת האחסון, השרת וקבוצת הניהול עבור תיבת הדואר.
בדוגמה שלהלן, המשתמש בעל שם הכניסה NoSendAs הוא בעל ההרשאה Full Mailbox Access אך לא בעל הרשאת 'שלח כ' עבור תיבת הדואר Mailbox Owner:
?"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled"""? [שדות אחרים הושמטו]

הגדרת התצורה של תחנת העבודה הניהולית עבור ה-script

? script זה משתמש בממשקי ניהול של Exchange כדי לתקשר עם שרתי Exchange. משום כך, יש להפעיל את ה-script משרת Exchange או מתחנת עבודה שבה מותקן Exchange System Administrator.

עריכת קובץ הייצוא

קובץ הייצוא מעוצב כטקסט Unicode רגיל, כך שניתן להתאימו לערכות תווים משפות מרובות. ייתכן שתוכניות מסוימות לעריכת טקסט אינן מציגות או אינן משנות את הקובץ באופן נכון או שהן שומרות את הקובץ כטקסט בתבנית ANSI או בתבנית ASCII. תוכנית השירות 'פנקס הרשימות' של Microsoft Windows XP, של Microsoft Windows 2000 ושל Microsoft Windows 2003 מטפלות באופן נכון בקבצי טקסט בתבנית Unicode. בנוסף, התוכנית Microsoft Excel מטפלת באופן נכון בקבצי טקסט בתבנית Unicode.

קובץ הפלט מופק בתבנית טקסט מופרד באמצעות טאבים עם מירכאות משולשות סביב הערכים של כל שדה. השימוש במירכאות המשולשות נעשה כדי להפוך את הייבוא מ-Excel ואת הייצוא אליו ליותר צפוי. בתוכנית Excel, המירכאות המשולשות הופכות למירכאות בודדות והן יהפכו שוב למירכאות משולשות בעת שמירת הקובץ שנית כטקסט Unicode. עיין בהוראות שלהלן כדי לפתוח ולשמור קובץ ייצוא באופן נכון ב-Excel.

באפשרותך גם לסנן קובץ ייצוא מבלי להשתמש בתוכנית Excel, וזאת באמצעות תוכנית השירות Find.exe או Findstr.exe. תוכניות שירות אלה כלולות במערכת Windows. הן מאפשרות לחפש מילים בקובץ ולהוציא פלט שבו רק שורות הכוללות את אותן מילים או רק שורות שאינן כוללות את אותן מילים. לדוגמה, אם ברצונך ליצור רשימה של כל הבעלים של תיבות דואר בקובץ שיש להם נציגים, השתמש באחת מהפקודות שלהלן כדי ליצור קובץ הכולל רק שורות עם המחרוזת Has Delegates.
Find.exe ?Has Delegates? OriginalFile.txt > HasDelegates.txt

Findstr.exe /C:?Has Delegates? OriginalFile.txt > HasDelegates.txt
כדוגמה נוספת, נניח שאתה מסנן את כל הבעלים של תיבות דואר שיש להם נציגים. הבורר ?/V מפיק פלט הכולל את כל השורות שאינן תואמות למילות החיפוש. באפשרותך להשתמש בכל אחת מהפקודות האלה כדי לייצר קובץ שאינו כולל אף אחת מהשורות של ?Has Delegates?:?
Find.exe ?No Delegates? OriginalFile.txt > NoDelegates.txt

Find.exe /V ?Has Delegates? OriginalFile.txt > NoDelegates.txt

Findstr.exe /C:?No Delegates? OriginalFile.txt > NoDelegates.txt

Findstr.exe /V /C:?Has Delegates? OriginalFile.txt > NoDelegates.txt
באפשרותך גם להשתמש בפקודות אלה כדי ליצור קובץ המונה את כל החשבונות שבהם לחשבון שירות יישום יש הרשאת Full Mailbox Access, אך לא הרשאת 'שלח כ'. הבורר ?/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 כדי לוודא כי המסנן לכד או הוציא את החשבונות אליהם התכוונת.

בדוגמה שלהלן, המשתמש בעל שם הכניסה NoSendAs הוא בעל ההרשאה Full Mailbox Access אך לא בעל הרשאת 'שלח כ' עבור תיבת הדואר Mailbox Owner.
?"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled"""? [שדות אחרים הושמטו]  

על בעלים של תיבות דואר שיש להם נציגים

בדרך כלל, אין להעניק לנציג בעל ההרשאה Full Mailbox Access (המוכר גם במונח 'נציג-על') את ההרשאה 'שלח כ'. כאשר נציג-העל נכנס ישירות לתיבת הדואר של הבעלים, באפשרותו להשתמש בתכונה 'שלח כ'. כאשר הנציג משתמש בתכונות ההקצאה של התוכנית Outlook (התכונה Additional Mailboxes to Open או התכונה Open Other User's Folder), ההודעות 'נשלחות בשם'.

רצוי שלא להעניק לנציג-על הרשאת 'שלח כ' אלא אם ברצונך שתמיד הוא ישלח כבעלים של תיבת הדואר ואף פעם לא ישלח בשם הבעלים של תיבת הדואר. מומלץ לחפש בקובץ הייצוא אחר מחרוזת הטקסט Has Delegates ולאחר מכן לקבוע אם נציג-על כלשהו מבין הנמנים שם הוא באמת נציג הבעלים של תיבת הדואר.

רק נציגי-על רשומים בקובץ הייצוא. נציגים רגילים אינם בעלי ההרשאה Full Mailbox Access. בנוסף, הענקת ההרשאה 'שלח כ' לנציג רגיל גורמת לכך כי הוא תמיד ישלח כבעלים של תיבת הדואר. הדבר נכון אף כאשר הנציג הרגיל אינו בעל ההרשאה Full Mailbox Access. אם בכל זאת מעניקים לנציג את ההרשאות 'שלח כ' למרות שאין כוונה לעשות כן, ניתן לבטלן במועד מאוחר יותר.

כיצד לפתוח קובץ ייצוא ב-Excel

  1. הפעל את Excel לפני הפעלת קובץ הייצוא.
  2. פתח את הקובץ ב-Excel כסוג Text Files. פעולה זו תפעיל את אשף ייבוא הטקסט.
  3. באשף ייבוא הטקסט, שנה או קבל את ההגדרות הבאות:
    • סוג נתונים מקורי: מופרד
    • התחל ייבוא בשורה: 1
    • מקור הקובץ: Unicode ?(UTF-8)
    • תווים מפרידים: טאב בלבד
    • טפל בתווים מפרידים רצופים כיחיד: לא מסומן
    • מזהה טקסט: " (מירכאות כפולות)

כדי לשמור קובץ ייצוא לאחר עריכת הקובץ ב-Excel

  1. בקובץ הייצוא, לחץ על שמירה בשם.
  2. קרא לקובץ בשם שונה כדי לשמור עותק לא ערוך של הקובץ המקורי.
  3. לחץ על קובץ, לחץ על שמירה בשם, הזן שם קובץ לשמירת הפלט ולאחר מכן בחר Unicode text ברשימה הנפתחת שמור כסוג.

תחביר ה-Script

זהו script במצב טקסט ויש להפעילו בחלון שורת פקודה ולא מתיבת הדו-שיח הפעלה. כדי לפתוח חלון שורת פקודה, לחץ על התחל, לחץ על הפעלה, הקלד CMD בתיבה פתח את ולאחר מכן לחץ על אישור.

יומני רישום שגיאות וקבצי ייצוא יישמרו בספריה הנוכחית של שורת הפקודה. כדי ליצור קבצים בספריה זו, יש להיות בעל הרשאות מתאימות.
כדי לקבל את העזרה של שורת הפקודה, הזן את הפקודה הבאה:
CSCRIPT AddSendAs.vbs
כדי לייצא משתמשים בעלי ההרשאה Full Mailbox Access ללא ההרשאה 'שלח כ' עבור תחום כלשהו, הזן את הפקודה הבאה:
CSCRIPT AddSendAs.vbs [domain controller name] ?Export

דוגמה: 

CSCRIPT AddSendAs.vbs CORP-DC-1 ?Export
קובץ הייצוא ייווצר בשם "Send_As_Export_H_MM_SS.txt".
כדי לייבא קובץ ייצוא שעבר עריכה, הזן את הפקודה הבאה:
CSCRIPT AddSendAs.vbs [domain controller name] ?Import [filename]


דוגמה:


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

כיצד להעניק את הרשאת 'שלח כ' בהתאמה עבור כל תיבת דואר בתחום עבור כל המשתמשים בעלי ההרשאה Full Mailbox Access לתיבת דואר מסוימת

שים לב אם יש לך נציגים שהם גם בעלי ההרשאה Full Mailbox Access בארגון שלך, עליך להימנע מלהשתמש במצב SetAll (הגדר הכול). אם בכל זאת תשתמש במצב SetAll (הגדר הכול) במצב זה, הנציגים יקבלו את הרשאת 'שלח כ'. אופן פעולה זה עלול לאפשר לכל הודעות הדואר האלקטרוני הנשלחות על-ידם לעשות שימוש בהרשאה 'שלח כ' במקום בהרשאה 'שלח בשם'. ניתן לתקן אופן פעולה זה על-ידי הסרת ההרשאה 'שלח כ' אשר ניתנה באופן שגוי לנציג.
CSCRIPT AddSendAs.vbs [domain controller name] ?SetAll


דוגמה:


CSCRIPT AddSendAs.vbs CORP-DC-1 ?SetAll
שימוש במצב SetAll יביא ליצירת קובץ ייצוא בשם Send_As_Export_H_MM_SS.txt. יש לשמור קובץ זה מכיוון שהוא מהווה רישום של כל החשבונות שעברו שינוי. במקרה בו ה-script מופעל שוב, הוא לא יוציא פלט של אותה רשימת חשבונות מכיוון שלחשבונות הוענקה בינתיים הרשאת 'שלח כ'.

שגיאות המופיעות בעת הפעלת ה-script יישמרו בקובץ Send_As_Errors_H_MM_SS.txt. שם קובץ השגיאה יהיה תואם לחותמת הזמן שעות_דקות_שניות של קובץ ייצוא משויך כלשהו.

שינויי Script

בארגון עשויים להיות חשבונות בעלי הרשאות באובייקטים רבים, אולם אתה לא מעוניין לשנות את ההרשאות. כדי להקטין את קובץ הייצוא, באפשרותך לסנן את החשבונות האלה באמצעות שינוי המשתנה FMA_EXCLUSIVE_LIST שנמצא סמוך לראש ה-script. כברירת מחדל, משתנה זה מציג מספר חשבונות שיש למנוע את הופעתם בפלט ה-script. באפשרותך להוסיף חשבונות נוספים באמצעות התבנית הבאה:
?& "<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 Services?"? ?& OUTPUT_DELIMITER?. "Exchange Services" הוא שם חשבון שמוענקות לו הרשאות דרך Active Directory Connector בתרחישי העברה ודו-קיום של Exchange 5.5 ושל Exchange 2000. חשבון זה נוצר בתחומים מרובים ועשוי להופיע שוב ושוב בקובץ הייצוא אם לא מונעים את הופעתו.

המשתנה FMA_EXCLUSIVE_EXSVC מקבל חשבון אחד בלבד כערך שלו. שם החשבון אינו תלוי-רישיות. החשבון המופיע ברשימה חייב להתחיל בתו לוכסן אחורי (\) ואסור שיכלול את התחום שאליו שייך החשבון. החשבון לא יופיע בכל התחומים בו הוא קיים.

אם השתמשת בכלי העברה או בפעולות שירות לסינכרון ספריות של ספק חיצוני, ייתכן שבתחומים מרובים קיים חשבון שונה בעל הרשאות מוענקות נרחבות לתיבות דואר של משתמשים. בתרחיש זה, באפשרותך להחליף את שמו של אותו חשבון ולקרוא לו "?\Exchange Services".

עצות ואזהרות

  • אל תמחק קבצי יומן רישום וקבצי שגיאות הנוצרים על-ידי ה-script. מאוחר יותר הם עשויים להיות בעלי ערך עבור פתרון בעיות או כדי להחזיר לאחור שינויים. זכור כי עם הענקת הרשאת 'שלח כ' לחשבון מסוים, הוא לא יירשם עוד ביומן קובץ הייצוא.
  • אם שרת או מסד נתונים של Exchange נופל, הדבר יביא להאטה בעיבוד ה-script. במקרה זה ניתן למיין את קובץ הייצוא לפי מסד נתונים ולהעביר לקובץ אחר שורות המשויכות למסד נתונים שנעצר ולייבאן שנית בהמשך.
  • ה-script מסלק פלט של חשבונות בהם שם הכניסה מסתיים בתו '$' או שהוא NT AUTHORITY\SYSTEM. חשבונות-מערכת אלה אינם צריכים, בדרך כלל, את הרשאת 'שלח כ' והסרתם מקובץ הייצוא מקטינה באופן משמעותי את נפחו.
  • קובץ הייצוא חייב להיות בתבנית Unicode כדי שניתן יהיה לייבאו. אם הקובץ נשמר במקרה בתבנית טקסט ANSI, ניתן לתקן בעיה זו על-ידי פתיחת הקובץ בפנקס הרשימות ושמירתו בתבנית טקסט Unicode.
  • אם הייבוא אינו פועל, פתור את הבעיה עם חשבונות ניסיוניים ושורה אחת בקובץ הייבוא. רצוי להגדיר חשבון ניסיוני בעל תיבת דואר בשרת Exchange פועל ולאחר מכן להעניק לחשבון ניסיוני נוסף את ההרשאה Full Mailbox Access אך לא את הרשאת 'שלח כ'.
  • לא קיים מצב של ביטול פעולה עבור script זה. כדי להסיר את הרשאות 'שלח כ' שהוענקו באמצעות script זה יש ליצור script נוסף או להסירם באופן ידני. האפשרות לביטול פעולה לא ניתנה כדי למנוע שימוש ב-script זה להסרת הרשאות 'שלח כ' עבור כל המשתמשים בארגון.
  • ה-script אינו מטפל כהלכה בחשבון שהוענקה לו שליטה מלאה באובייקט משתמש ביחד עם הרשאת Full Mailbox Access. שליטה מלאה כוללת את הרשאת 'שלח כ', אולם ה-script ייצא את החשבון כאילו אין לו הרשאת 'שלח כ'. הדבר עשוי להגדיל את הנפח של קובץ הייצוא, אולם לא נגרם כל נזק מייבוא הקובץ ומההענקה המיותרת של הרשאת 'שלח כ' לאותם חשבונות.
  • אין באפשרות ה-script לעבד חשבונות משתמשים של Active Directory בעלי שמות ייחודיים וחשבונות הכוללים טאבים או מירכאות כפולות לא תואמות. באפשרותו של קובץ ה-script לעבד כהלכה שם הכולל מירכאות כפולות תואמות, כמו השם הבא:
    ?CN=First ?Nickname? Last,DC=domain,DC=com?
  • התוכנית Excel יכולה לטפל בקובץ שבו 65,535 שורות לכל היותר. אם קובץ הפלט כולל שורות במספר רב מזה, יש לפצל אותו לקטעים לפני טעינתו בתוכנית Excel.
  • הקובץ Send_As_Errors ימנה חשבונות ספציפיים שבהם אירע כשל בקריאה או בכתיבה של הרשאות. אם חשבונות אחרים בתחום עובדו באופן נכון, ייתכן שלחשבונות אלה יש דבר-מה במשותף המונע מקובץ ה-Script מלפעול עמם. עם הבעיות הנפוצות נמנות הבעיות הבאות:
    • היעדר הרשאות ניהוליות להצגת תכונות בחשבונות או להגדרתן.
    • מאגר תיבות הדואר של Exchange אינו מופעל.
    • תחנת העבודה אינה חברה באותו תחום.
    • החשבון הניהולי הנמצא בשימוש אינו מאותו יער.
כדי להפעיל script זה, העתק והדבק את כל השורות בין BEGIN SCRIPT ל-END SCRIPT לתוך עורך טקסט רגיל כגון פנקס הרשימות. שמור את ה-script בשם AddSendAs.vbs. BEGIN SCRIPT
Option Explicit

Dim OUTPUT_DELIMITER
OUTPUT_DELIMITER = """""""" & vbTab & """"""""

'הגדר רשימה בלעדית, אם ניתן FMA למשתמש כלשהו ברשימה זו, המערכת מתעלמת ממנו.  אם 
ברצונך לשנות רשימה זו, הקפד להשתמש באותה תבנית. לכל כינוי צריך להיות
'OUTPUT_DELIMITER לפניו ואחריו.
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
סוף ה-SCRIPT

Microsoft מספקת את דוגמאות התכנות שלהלן להמחשה בלבד וללא כל אחריות, בין מפורשת ובין משתמעת, ובכלל זה, אך לא רק, אחריות לגבי סחירות או התאמה למטרה מסוימת. מאמר זה מבוסס על ההנחה שאתה מכיר את שפת התכנות המודגמת ובקי בהפעלת הכלים המשמשים ליצירת פרוצדורות ולניפוי שגיאות. מהנדסי התמיכה של Microsoft יכולים לסייע בהסברת הפונקציונליות של פרוצדורה מסוימת, אך הם לא ישנו את הדוגמאות כדי לספק פונקציונליות נוספת או כדי לבנות פרוצדורות שיענו על צרכיך הספציפיים.
לקבלת מידע נוסף על אפשרויות התמיכה של Microsoft, בקר באתר של Microsoft שלהלן:
http://support.microsoft.com/contactus/?ws=support
מוצרים של ספקים חיצוניים הנזכרים במאמר זה מיוצרים על-ידי חברות שאינן תלויות ב-Microsoft.? חברת Microsoft אינה מעניקה אחריות, בין במפורש ובין במשתמע, לגבי ביצועיהם או אמינותם של מוצרים אלה.

מאפיינים

Article ID: 912918 - Last Review: יום שני 26 נובמבר 2007 - Revision: 17.2
המידע במאמר זה חל על:
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Exchange 2000 Enterprise Server
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange Server 2003 Enterprise Edition
מילות מפתח 
kbtshoot kbpending kbbug kbprb KB912918

ספק משוב

 

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