Les utilisateurs ne peuvent pas envoyer des messages électroniques à partir d’un périphérique mobile ou à partir d’une boîte aux lettres partagée dans Exchange 2000 Server et Exchange Server 2003

Symptômes

Lorsque vous essayez d’envoyer un message électronique dans Microsoft Exchange 2000 Server ou Microsoft Exchange Server 2003, vous ne pouvez pas envoyer le message électronique. En outre, vous pouvez recevoir un des messages d’erreur suivants ou l’un de le rapports de non remise (NDR) suivants.

Messages d’erreur

  • Accès refusé
  • Vous n’avez pas de permissions suffisantes pour effectuer cette opération sur cet objet. Consultez le contact du dossier ou votre administrateur système.
  • Aucun Message d'erreur
  • MAPI_E_NO_ACCESS -2147024891
  • Impossible d’envoyer le message électronique pour l’utilisateur NomUtilisateur (HRESULT : -2147024891) interruption utilisateur nom d’utilisateur. (Erreur de sécurité - ne peut pas accéder à la boîte aux lettres d’utilisateurs.)
  • Ressource non trouvée
Remarque Vous recevez le message d’erreur « Accès refusé » ou le message d’erreur « Ressource introuvable » à partir de Microsoft Outlook Web Access lorsque vous êtes connecté tant que compte délégué.

Rapports de non-remise

  • Vous n’avez pas l’autorisation d’envoyer à ce destinataire. Pour obtenir de l’aide, contactez votre administrateur système.
  • Le message n’a pas pu être envoyé à l’aide de votre boîte aux lettres. Vous ne disposez pas de la permission d’envoyer le message au nom de l’utilisateur spécifié.

Produits concernés

Ce problème se pose avec les produits tiers suivants :
  • Research In Motion (RIM) BlackBerry Enterprise Server (BES)
  • Sans fil GoodLink de bonne technologie de messagerie
Ce problème peut également concerner personnalisé MAPI ou CDO Collaborative Data Objects-programmes qui envoient des messages électroniques.

Autres produits tiers qui utilisent des comptes de service pour envoyer des messages électroniques peuvent également être affectées. Si vous exécutez un produit tiers concerné par ce problème, nous vous conseillons de contacter le fournisseur pour vous aider à résoudre ce problème.

Toutefois, il a été confirmé que les produits tiers suivants ne sont pas affectés par ce problème :
  • Unité de Cisco Unified Messaging
  • Suite de Migration Quest pour Exchange
  • L’utilitaire Microsoft ExMerge pour Exchange

Cause

Ce problème peut se produire si une des conditions suivantes est remplie :
  • Vous n’avez pas les autorisations nécessaires pour envoyer des messages électroniques en tant que propriétaire de boîte aux lettres dans le compte que vous utilisez pour envoyer le message électronique.
  • Vous exécutez Microsoft Exchange 2000 Server Service Pack 3 (SP3) avec un fichier Store.exe version est égale ou postérieure à la version 6619.4. La version 6619.4 a été la première fois dans l’article suivant de la Base de connaissances Microsoft :
    915358 un correctif est disponible pour modifier le comportement de l’autorisation accès complet à la boîte aux lettres dans Exchange 2000 Server

  • Vous exécutez Microsoft Exchange Server 2003 Service Pack 1 avec un fichier Store.exe version est égale ou postérieure à la version 7233.51.
  • Vous exécutez Exchange Server 2003 SP2 avec un fichier Store.exe version est égale ou postérieure à la version 7650.23. La version 7650.23 a été la première fois dans l’article suivant de la Base de connaissances Microsoft :
    895949 du comportement de l’autorisation « Envoyer en tant que » change dans Exchange 2003

    Cette modification n’est pas incluse dans Exchange Server 2003 SP2. Si vous exécutez la version Exchange Server 2003 SP1 du fichier Store.exe qui inclut cette modification et mise à niveau vers Exchange Server 2003 SP2, vous devez installer la version Service Pack 2 de ce correctif pour conserver ce nouveau comportement. Ce changement sera inclus dans le Service Pack 3 de Microsoft Exchange Server 2003.

PROBLÈMES DE SÉCURITÉ

Avant les versions du fichier Store.exe qui sont répertoriées dans la section « Cause », l’octroi de l’autorisation accès complet à la boîte aux lettres implicitement l’autorisation Envoyer en tant que propriétaire de la boîte aux lettres. Cela signifie qu’un autre compte qui dispose de l’autorisation accès complet à la boîte aux lettres peut envoyer des messages électroniques qui apparaissaient comme s’ils étaient envoyés par le propriétaire de la boîte aux lettres.

De nombreux clients Microsoft Exchange ont demandé que l’autorisation Envoyer en tant qu’être séparée de l’autorisation accès complet à la boîte aux lettres pour les deux raisons suivantes :
  • Pour prévenir l’usurpation d’adresse de messagerie.
  • Pour vous assurer que les messages qui sont envoyés par un délégué peuvent toujours être distingués clairement des messages électroniques qui sont envoyés par le propriétaire de la boîte aux lettres.
Toutes les nouvelles versions de la banque Exchange exigeront désormais l’autorisation Envoyer en tant que pour envoyer des messages électroniques en tant que propriétaire de la boîte aux lettres. Toutefois, voici les trois exceptions à cette règle :
  • Le compte de propriétaire de boîte aux lettres ne nécessite pas d’autorisation Envoyer en tant qu’explicite pour sa propre boîte aux lettres.
  • Le compte externe associé d’une boîte aux lettres ne nécessite pas d’autorisation Envoyer en tant qu’explicite.
  • Un compte délégué qui possède également l’autorisation accès complet à la boîte aux lettres ne nécessite pas d’autorisation Envoyer en tant qu’explicite.
Pour plus d’informations sur ces exceptions, reportez-vous à la section « Informations complémentaires ».

Résolution

Tous les comptes qui bénéficient d’un accès partiel ou complet à une boîte aux lettres, à l’exception de celles mentionnées dans la section « Cause », doivent maintenant être accordés explicitement l’autorisation Envoyer en tant que pour le compte de propriétaire de boîte aux lettres pour envoyer du courrier en tant que propriétaire de la boîte aux lettres. Cela inclut les comptes de service d’application qui exécutent des fonctions telles que l’envoi de messages électroniques pour les utilisateurs d’appareils mobiles.

L’autorisation Envoyer en tant que s’applique à l’identité d’un objet utilisateur Active Directory, non au contenu des boîtes aux lettres qui sont stockées dans une base de données. Par conséquent, l’autorisation Envoyer en tant que doit bénéficier au compte de service sur chaque objet utilisateur propriétaire d’une boîte aux lettres. Lorsque les messages sont envoyés, ils ne sont pas envoyés à partir d’une base de données ou la boîte aux lettres particulière, mais depuis un utilisateur. L’utilisateur peut être propriétaire de la boîte aux lettres ou de tout autre compte qui dispose de l’autorisation Envoyer en tant que.

Impossible d’accorder l’autorisation Envoyer en tant que sur un serveur qui exécute Exchange Server ou sur un objet de base de données et obtenir l’effet de l’octroi de l’autorisation Envoyer en tant que pour toutes les boîtes aux lettres de la base de données. L’octroi de l’autorisation Envoyer en tant que sur un objet de base de données Exchange vous donne l’autorisation à la base de données elle-même. L’autorisation est héritée par toutes les boîtes aux lettres de la base de données. Toutefois, il ne pas vous donne l’autorisation pour les utilisateurs qui disposent des autorisations Envoyer en tant qu’et qui ont des boîtes aux lettres dans la base de données.

Remarque L’octroi de l’autorisation Recevoir comme sur une base de données Exchange est l’équivalent fonctionnel de l’octroi de l’autorisation accès complet à la boîte aux lettres pour toutes les boîtes aux lettres de la base de données. Ce comportement diffère de l’autorisation Envoyer en tant que.

Comment faire pour accorder les autorisations Envoyer en tant que pour un seul compte

Pour octroyer explicitement une autre compte l’autorisation Envoyer en tant que propriétaire de boîte aux lettres, procédez comme suit :
  1. Démarrez la console de gestion des ordinateurs et utilisateurs Active Directory.
  2. Dans le menu affichage , assurez-vous que le
    Fonctionnalités avancées est sélectionnée. Si cette option n’est pas sélectionnée, la page de sécurité ne sera pas visible pour les objets compte d’utilisateur.
  3. Ouvrez les propriétés du compte d’utilisateur qui possède la boîte aux lettres.
  4. Cliquez sur l'onglet sécurité .
  5. Si le compte n’est pas déjà dans la liste des noms d’utilisateur ou de groupe, ajoutez le compte qui doit avoir l’autorisation Envoyer en tant que pour cet utilisateur.
  6. Dans la zone autorisations , cliquez sur l’autorisation Autoriser pour la « envoyer en tant que » pour le compte approprié.
  7. Cliquez sur OK.
  8. Redémarrez le service Microsoft Exchange Information Store sur le serveur Exchange concerné.
Remarque Si vous ne redémarrez pas le service Microsoft Exchange Information Store, le service Microsoft Exchange Information Store met à jour son cache d’autorisations pour créer la nouvelle autorisations prennent effet en fonction de la valeur qui est définie dans la sous-clé de Registre suivante :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem
Nom de la valeur : Mailbox Cache Age Limit.
Type de la valeur : REG_DWORD
Base : décimal
Données de la valeur : la limite d’âge du cache d’informations boîtes aux lettres en quelques minutes.
La valeur par défaut pour cette entrée de Registre est de 120 minutes (deux heures). Si vous modifiez cette entrée de Registre, vous devez redémarrer le service Microsoft Exchange Information Store.

Remarque Si vous définissez les valeurs de délai d’attente sur une valeur très faible, vous pouvez affecter les performances du serveur.

Comment faire pour octroyer l’autorisation Envoyer en tant que pour plusieurs comptes

Un exemple de script est fourni à la fin de cet article qui recherche un domaine du service Active Directory pour les comptes qui disposent de l’autorisation accès complet à la boîte aux lettres sans l’autorisation Envoyer en tant que boîte aux lettres. Voici les caractéristiques d’un compte de service ou une ressource qui seront affectés par ce changement de sécurité. Le script peut générer un fichier d’exportation que vous pouvez consulter, modifier et réimporter pour octroyer l’autorisation Envoyer en tant qu’aux comptes qui nécessitent cette autorisation.

Vous pouvez également accorder l’autorisation Envoyer en tant que par héritage sur chaque objet utilisateur dans un domaine Active Directory ou dans un conteneur. Si vous octroyez l’autorisation Envoyer en tant que par cette méthode, peut accorder des autorisations pour les objets que vous n’aviez pas l’intention. En outre, vous risquez de perdre les autorisations pour les objets qui sont déplacés à partir du conteneur. Par conséquent, cette méthode n’est pas recommandée et peut avoir des conséquences sur la sécurité qui doivent être soigneusement avant d’implémenter.

Si vous octroyez l’autorisation Envoyer en tant qu’en utilisant cette méthode, les comptes qui ont hérité de l’autorisation Envoyer en tant que seront invisibles au script qui est référencé à la fin de l’article dans le rapport. Pour traiter ces comptes en utilisant le script à une date ultérieure, vous devez d’abord supprimer l’autorisation héritée Envoyer en tant que.

Pour accorder l’autorisation Envoyer en tant que pour un seul compte sur tous les comptes d’utilisateur dans un conteneur ou un domaine Active Directory à l’aide de l’héritage, procédez comme suit :
  1. Démarrez la console de gestion des ordinateurs et utilisateurs Active Directory.
  2. Dans le menu affichage , assurez-vous que le
    Fonctionnalités avancées est sélectionnée. Si cette option n’est pas sélectionnée, la page de sécurité ne sera pas visible pour les objets domaine et conteneur.
  3. Ouvrez les propriétés du domaine ou du conteneur, puis cliquez sur la page sécurité.
  4. Cliquez sur Avancé.
  5. Si le compte nécessitant une autorisation n’est pas déjà répertorié, cliquez sur Ajouter, puis sélectionnez le compte. Dans le cas contraire, double-cliquez sur le compte pour le modifier.
  6. Dans la liste Appliquer à , cliquez sur
    Les objets utilisateur.
  7. Accordez l’autorisation Envoyer en tant que compte de.
  8. Cliquez sur OK jusqu'à ce que vous avez quitté et enregistré tous les changements.

Règles particulières concernant les comptes protégés par adminSDHolder

Si vous utilisez le script pour octroyer l’autorisation Envoyer en tant que pour un propriétaire de boîte aux lettres qui est également administrateur de domaine, il se peut que l’autorisation Envoyer en tant que ne sera pas efficace. Il est fortement recommandé que vous ne pas boîtes aux lettres aux comptes d’utilisateurs qui ont des droits d’administrateur de domaine ou qui sont protégés par adminSDHolder.



L’objet adminSDHolder est un modèle pour les comptes disposant de droits d’administration Active Directory étendus. Pour empêcher une élévation involontaire des privilèges, tout compte protégé par l’objet adminSDHolder doit avoir les autorisations correspondent à celles qui figurent sur l’objet adminSDHolder .



Si vous modifiez les droits ou les autorisations sur l’objet adminSDHolder pour un compte protégé, une tâche d’arrière-plan défait le changement en quelques minutes. Par exemple, si vous octroyez l’autorisation Envoyer en tant que sur un objet administrateur de domaine d’un compte de service d’application, la tâche d’arrière-plan annule automatiquement l’autorisation.



Par conséquent, vous ne pouvez pas accorder l’autorisation Envoyer en tant qu’à un compte de service d’application pour un compte protégé par l’objet adminSDHolder , sauf si vous modifiez l’objet adminSDHolder . Si vous ne modifiez pas l’objet adminSDHolder , les autorisations d’accès pour tous les comptes protégés changera. Vous ne devez modifier l’objet adminSDHolder qu’après une révision complète des implications de sécurité qui peuvent se produire avec la modification.


Pour associer une boîte aux lettres à un compte protégé par l’objet adminSDHolder , procédez comme suit :
  1. Démarrez la console de gestion des ordinateurs et utilisateurs Active Directory.
  2. Dans le menu affichage , assurez-vous que le
    Fonctionnalités avancées est sélectionnée. Si cette option n’est pas sélectionnée, la page de sécurité ne sera pas visible pour les objets compte d’utilisateur.
  3. Créer un compte d’utilisateur ordinaire en tant que propriétaire de la boîte aux lettres.
  4. Attribuer le compte d’utilisateur ordinaire à une boîte aux lettres sur un serveur Exchange.
  5. Ouvrez les propriétés du nouveau compte de propriétaire de boîte aux lettres.
  6. Dans la zone Exchange-Paramètres avancés , accordez l’autorisation accès complet à la boîte aux lettres pour le compte d’administrateur protégé.
  7. Dans la page sécurité, accordez l’autorisation Envoyer en tant qu’à un compte d’administrateur protégé.
  8. Cliquez sur OK pour quitter les propriétés de l’objet propriétaire de boîte aux lettres.
  9. Droit de l’objet compte de propriétaire de boîte aux lettres, puis cliquez sur Désactiver le compte pour désactiver le compte pour toutes les ouvertures de session.
Pour plus d’informations sur les comptes protégés par adminSDHolder, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :

907434 le « envoyer en tant que » est supprimée d’un objet utilisateur après avoir configuré le droit « Envoyer en tant que » dans Active Directory utilisateurs et ordinateurs enfichable dans Exchange Server

318180 thread AdminSDHolder affecte les membres transitifs des groupes de distribution

817433 les autorisations déléguées ne sont pas disponibles et l’héritage est désactivé automatiquement

306398 l’objet AdminSDHolder affecte la délégation du contrôle des comptes d’administrateurs antérieurs

Tâches spéciales pour BlackBerry Enterprise Server

Tâche 1 : Assurez-vous que BlackBerry Enterprise Server s’exécute sous un compte unique distinct

Assurez-vous que BlackBerry Enterprise Server s’exécute sous un compte séparé qui est créé spécifiquement pour les tâches administratives. Par défaut, ce compte est nommé « BESAdmin ».

Si vous avez un compte distinct pour l’administration de BlackBerry Enterprise Server, passez à la tâche 2.


Si vous ne disposez pas d’un compte distinct, créer un compte distinct. Ensuite, utilisez ce compte pour effectuer des tâches d’administration. Pour obtenir des instructions sur la procédure à suivre si vous exécutez BlackBerry Enterprise Server 4.0 ou BlackBerry Enterprise Server 4.1, reportez-vous au Guide d’Installation de BlackBerry Enterprise Server.  Pour obtenir des instructions sur la façon de procéder ainsi si vous exécutez BlackBerry Enterprise Server 3.6, reportez-vous à l’Installation de BlackBerry Enterprise Server 2000/2003 et le Guide de démarrage.

Tâche 2 : Assurez-vous que le compte de service BlackBerry Enterprise Server dispose des autorisations appropriées

Vérifiez que le compte de service BlackBerry Enterprise Server dispose des autorisations appropriées.

Remarque Si le compte est dans un domaine, assurez-vous que le compte est membre du groupe utilisateurs du domaine uniquement. Sur un contrôleur de domaine, le compte doit être membre du groupe Administrateurs intégrés.
  1. Sur le serveur BlackBerry Enterprise Server, procédez comme suit :
    1. Assurez-vous que le compte est membre du groupe Administrateurs Local.
    2. Affecter des autorisations « Ouvrir une session localement » et « Journal sur en tant que Service » au compte.
  2. Autorisations d’administrateur Exchange Affichage seul de subvention au niveau du groupe d’administration. Pour ce faire, procédez comme suit :
    1. Dans le Gestionnaire système Exchange, cliquez sur le premier nom de groupe d’administration d’Exchange Server, puis cliquez sur Déléguer le contrôle.
    2. Notez que le compte de service BlackBerry Enterprise Server est répertorié comme possédant le rôle d’administrateur Exchange Affichage seul.
  3. Accorder le « Envoyer en tant que, » « Recevoir comme » et le niveau d’autorisations de « Administrer la banque d’informations » au niveau du serveur pour chaque serveur Exchange. Pour ce faire, procédez comme suit :
    1. Dans le Gestionnaire système Exchange, cliquez sur le premier nom de groupe administratif Exchange Server, puis développez le
      Groupe de serveurs .
    2. Cliquez sur un serveur Exchange, cliquez sur
      Propriétés, puis cliquez sur
      Sécurité.
    3. Dans le volet supérieur, sélectionnez le compte de service BlackBerry Enterprise Server. Dans le volet inférieur, assurez-vous que le « envoyer en tant que, » « Recevoir comme » et « Administrer la banque d’informations » autorisations est définies
      Autoriser.
    4. Répétez les étapes 3 b et 3C pour chaque serveur Exchange.
  4. Accorder le « Envoyer en tant que, » « Recevoir comme » et « Administrer la banque d’informations » les autorisations dans la banque de boîtes aux lettres. Pour ce faire, procédez comme suit :
    1. Dans le Gestionnaire système Exchange, cliquez sur le premier nom de groupe d’administration Exchange et développez le
      Groupe de serveurs .
    2. Développez le premier groupe de la banque de boîtes aux lettres, cliquez sur chaque banque de boîtes aux lettres, cliquez sur Propriétés, puis cliquez sur
      Sécurité.
    3. Dans le volet supérieur, sélectionnez le compte de service BlackBerry Enterprise Server. Dans le volet inférieur, assurez-vous que le « envoyer en tant que, » « Recevoir comme » et « Administrer la banque d’informations » autorisations est définies
      Autoriser.
    4. Répétez les étapes 4 b et 4c pour chaque banque de boîtes aux lettres sur chaque serveur Exchange.
  5. Dans le composant logiciel enfichable ordinateurs et utilisateurs Active Directory, procédez comme suit :
    1. Cliquez sur l’utilisateur que vous souhaitez ajouter des autorisations pour, puis cliquez sur Propriétés.
    2. Sous l’onglet sécurité , ajoutez le compte de service BlackBerry Enterprise Server, puis cliquez sur pour sélectionner le
      Envoyer en tant que cette case.
Si vous n’exécutez pas Exchange Server 2003, consultez l’étape 3.

Tâche 3 : Effacer le cache sur le serveur BlackBerry Enterprise Server

Pour effacer le cache d’autorisations dans la banque Exchange, redémarrer les services associés à Blackberry et redémarrez le serveur Microsoft Exchange Information Store. Après le redémarrage de la banque d’informations Exchange, vous devez redémarrer les services associés à RIM Blackberry pour autoriser le compte « BESAdmin » le nouvellement ajouté envoyer en tant que sur la banque Exchange.

Plus d'informations

Autorisations d’accès des fichiers et des dossiers de boîte aux lettres Exchange sont réparties entre les bases de données Active Directory et Microsoft Exchange. Toutefois, les deux types d’autorisations sont définis dans la console de gestion des utilisateurs Active Directory, mais les autorisations différentes sont stockées dans deux endroits différents.

En règle générale, si une autorisation est définie sur la page de sécurité d’un objet, il est une autorisation Active Directory. Si elle est définie sur la page droits de boîte aux lettres Exchange avancée, il s’agit d’une autorisation de base de données Exchange.

L’attribut Active Directory msExchMailboxSecurityDescriptor est une copie de sauvegarde d’un sous-ensemble des droits de boîte aux lettres effectifs. Elle est utilisée en interne par Exchange à diverses fins. En outre, l’attribut msExchMailboxSecurityDescriptor est mis à jour pour correspondre aux droits actuels effectifs si les administrateurs utilisent les interfaces prises en charge pour attribuer des droits. Toutefois, si l’attribut msExchMailboxSecurityDescriptor est modifié directement par un administrateur, les modifications ne seront pas propagées à la banque Exchange, et les modifications ne prendront pas effet. Il n’est pas garanti pour être synchronisé avec les droits de boîte aux lettres. Vous ne devez pas utiliser l’attribut msExchMailboxSecurityDescriptor pour lire ou écrire des droits de boîte aux lettres.
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

310866 comment définir les droits de boîte aux lettres Exchange Server 2003 et Exchange 2000 Server sur une boîte aux lettres qui existe dans la banque d’informations


L’autorisation accès complet à la boîte aux lettres est une autorisation de magasin de base de données Exchange. L’autorisation Envoyer en tant qu’est une autorisation Active Directory. Avant Exchange Store.exe les modifications de fichier qui sont décrits dans cet article, le système Exchange ne consultait pas le paramètre de l’autorisation Envoyer en tant que si l’expéditeur disposait déjà de l’autorisation accès complet à la boîte aux lettres.

Inclusion de l’autorisation Envoyer en tant qu’avec l’autorisation accès complet à la boîte aux lettres a activé le serveur aux administrateurs Exchange de s’octroyer eux-mêmes des autorisations Envoyer en tant qu’effectives pour les boîtes aux lettres sur un serveur qu’ils administrent. En séparant l’autorisation Envoyer en tant que de l’autorisation accès complet à la boîte aux lettres, les administrateurs d’Active Directory peuvent maintenant bloquer ce processus, car l’autorisation Envoyer en tant qu’est une autorisation Active Directory et non une autorisation de la banque d’informations Exchange. Par conséquent, le processus n’est pas nécessairement sous le contrôle des administrateurs Exchange.

Propriétaires de boîtes aux lettres

Un propriétaire de boîte aux lettres est défini comme le compte d’utilisateur Active Directory dont l’attribut msExchMailboxGUID porte l’identificateur global unique (GUID) pour une boîte aux lettres particulière. Un seul compte dans une forêt entière est autorisé à porter le GUID d’une boîte aux lettres particulière. Si vous essayez de définir un deuxième propriétaire doté du même GUID, Active Directory rejette le changement avec une erreur.


Lorsque vous ã un compte ou lorsque vous connectez une boîte aux lettres déconnectée à un compte Active Directory, la boîte aux lettres GUID est automatiquement définie sur ce compte. Il est rarement nécessaire ou conseillé que les administrateurs définissent directement les GUID de boîte aux lettres.

Comptes externes associés

Une configuration Exchange courante est à installer Exchange dans une forêt de ressources. Une forêt de ressources est une forêt d’une autre forêt de comptes d’utilisateurs qui auront des boîtes aux lettres dans le système. Cela pose un problème car l’attribut msExchMailboxGUID ne peut être définie sur des objets dans la même forêt que le serveur Exchange.

La solution à ce problème consiste à activer la boîte aux lettres un compte dans la forêt de serveurs Exchange. Puis de relier ce compte à extension boîte aux lettres vers une autre forêt ou dans un domaine Microsoft Windows NT 4. Vous pouvez le faire en accordant l’autorisation compte externe associé. Un seul compte peut avoir l’autorisation compte externe associé. Le compte sélectionné doit être d’une forêt différente.

Lorsque vous définissez l’autorisation compte externe associé, vous écrivez la valeur du SID du compte externe dans l’attribut msExchMasterAccountSID du propriétaire de boîte aux lettres. Par conséquent, il n’est pas une autorisation, mais un moyen pratique pour contrôler la valeur de l’attribut msExchMasterAccountSID . Après le msExchMasterAccountSID attribut a été défini, le compte externe possédant le SID auront accès à Exchange comme s’il s’agissait du compte de propriétaire de boîte aux lettres.

Remarque Cela s’applique uniquement à access d’Exchange, pas pour tous les accès à Active Directory. En outre, vous devez marquer le compte propriétaire de boîte aux lettres comme désactivé pour les ouvertures de session après avoir défini l’autorisation compte externe associé, afin que toutes les autorisations fonctionnent comme prévu.

Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

300456 autorisations et délégations client ne restent pas après leur affectation dans Exchange 2000

Scénarios de délégation

Un délégué est un utilisateur qui dispose d’un accès partiel à une boîte aux lettres et le droit d’envoyer des messages électroniques au nom de ce propriétaire de boîte aux lettres. Un scénario de délégation courant consiste à accorder des accès délégué à un assistant administratif pour le calendrier d’un cadre. Le délégué peut généralement lire et mettre à jour le calendrier. En outre, il peut répondre à des messages électroniques pour le compte du responsable.

Vous pouvez utiliser les deux interfaces suivantes à accorder l’envoyer de la part d’et déléguer des autorisations :
  • Dans l’objet propriétaire de boîte aux lettres, accordez l’autorisation Exchange Général d’envoi boîte de dialogue.
  • Dans le de Microsoft Office Outlook, utilisez la boîte de dialogue de délégués .
Ces deux méthodes définissent l’attribut publicDelegates de la boîte aux lettres. Tous les utilisateurs qui sont répertoriés dans cet attribut ont envoyer de la part du propriétaire de boîte aux lettres. Lorsque ces délégués envoient un message électronique comportant le nom du propriétaire dans la zone de , le message électronique est envoyé à partir du délégué et non à partir ou en tant que propriétaire de la boîte aux lettres. Zone à partir du message électronique affiche la valeur suivante :
<Nom> au nom de <Propriétaire de boîte aux lettres>
Dans certains cas, il se peut que vous ne puissiez pas définir l’attribut publicDelegates dans Outlook.
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

329622 l’autorisation « Envoyer de la part » n’est pas affectée à un utilisateur après avoir délégué l’accès dans Outlook


Si vous accordez un accès délégué à votre boîte aux lettres, le délégué peut utiliser l’autorisation d’envoi même si vous n’accordez pas d’accès à l’un de vos dossiers de boîte aux lettres. L’autorisation essentielle qui dispose d’un délégué est envoyer de la part. Autorisations d’accès aux dossiers de votre boîte aux lettres sont séparées et doivent être accordées en plus des autorisations de délégation. En règle générale, les délégués utilise Outlook pour accéder aux dossiers individuels auxquels vous leur avez donné l’autorisation. Pour ce faire, cliquez sur Ouvrir dans le menu fichier d’Outlook, puis cliquez sur dossier d’un autre utilisateur.

Sinon, les délégués peuvent ouvrir votre boîte aux lettres en la faisant figurer sous la forme d’une boîte aux lettres supplémentaire dans le
Onglet Avancé de leurs profils Outlook. Cette méthode permet à votre boîte aux lettres apparaissent dans l’arborescence de dossier Outlook du délégué. En outre, cette méthode permet l’accès à tous les dossiers de votre boîte aux lettres pour laquelle un délégué dispose des autorisations.

Vous souhaiterez parfois avoir l’autorisation d’envoi et à d’autres moments ont l’autorisation Envoyer en tant que votre délégué. Pour configurer un délégué avec ces deux autorisations, procédez comme suit :
  • Accorder au délégué l’autorisation accès complet à la boîte aux lettres. Ce n’est pas possible via Outlook. Au lieu de cela, un administrateur Active Directory doit procéder dans le compte de propriétaire de boîte aux lettres. Même si vous accordez des autorisations de propriétaire sur chaque dossier de votre boîte aux lettres, qui n’est pas la même autorisation que l’autorisation accès complet à la boîte aux lettres.
  • N’accordez pas le délégué l’autorisation Envoyer en tant que. Si vous les lui accorder l’autorisation Envoyer en tant que, tous les messages électroniques qui sont envoyés par le délégué seront effectuées avec l’autorisation Envoyer en tant que. Le délégué ne seront plus en mesure d’utiliser l’autorisation d’envoi.
Dans ce scénario, délégués souhaitant utiliser l’autorisation d’envoi doivent se connecter à leurs boîtes aux lettres. Si les délégués sont la réponse ou un message électronique se trouvant déjà dans un de vos dossiers, le message électronique est envoyé automatiquement pour vous. S’ils créent un nouveau message électronique de votre part, ils doivent taper votre nom dans la zone du message électronique soit envoyé de votre part.

Que si les délégués ont ouvert vos dossiers ou votre boîte aux lettres entière sous la forme d’une boîte aux lettres secondaire, tous les messages qu’ils vous envoient utilise l’autorisation d’envoi tant que leur propre boîte aux lettres est la boîte aux lettres principale du profil Outlook actuel.

Lorsque les délégués veulent envoyer un message électronique comme vous, ils doivent ouvrir une session à votre boîte aux lettres à l’aide d’un profil Outlook séparé qui ouvre uniquement votre boîte aux lettres. Les messages électroniques que les délégués envoient quand ils sont connectés à ce profil est envoyés automatiquement de votre part.

Recherche de comptes qui disposent de l’autorisation accès complet à la boîte aux lettres sans l’autorisation Envoyer en tant que

L’exemple de script qui est décrite dans cette section peut rechercher un domaine Active Directory à la fois pour les comptes d’utilisateur où l’autorisation accès complet à la boîte aux lettres a été accordée à une boîte aux lettres sans l’autorisation Envoyer en tant que.


Important Avant de modifier les autorisations, reportez-vous à la section « àpropos des propriétaires de boîtes aux lettres avec délégués».

Le script a les trois modes suivants :
  • Exporter Vous pouvez générer une liste d’utilisateurs qui disposent de l’autorisation accès complet à la boîte aux lettres, mais pas de l’autorisation Envoyer en tant que. Vous pouvez afficher cette liste dans le bloc-notes ou un autre éditeur pour supprimer tous les comptes que vous ne souhaitez pas disposer de l’autorisation Envoyer en tant que.
  • Importation Vous pouvez importer une liste d’utilisateurs qui ont l’autorisation accès complet à la boîte aux lettres auxquels l’autorisation Envoyer en tant que doit également être octroyée. Notez que vous ne pouvez pas utiliser ce script pour octroyer l’autorisation accès complet à la boîte aux lettres et l’autorisation Envoyer en tant que. Chaque compte doit avoir l’autorisation accès complet à la boîte aux lettres à octroyer l’autorisation Envoyer en tant que.
  • SetAll Vous pouvez accorder l’autorisation Envoyer en tant qu’à tous les utilisateurs du domaine déjà dotés de l’autorisation accès complet à la boîte aux lettres pour une boîte aux lettres particulière. Un fichier journal sera généré dans le même format que le fichier d’exportation. Cela équivaut à exécuter les modes exportation et importation sans modifier le fichier d’exportation.
Remarque Il n’y a aucune fonction d’annulation dans ce script.

Autorisations qui sont requises pour le script

Vous devez exécuter le script pendant que vous êtes connecté avec un compte administratif qui est de la même forêt que les comptes de propriétaire de boîte aux lettres sont à partir de. Le script ne peut pas fonctionner avec un compte qui dispose des autorisations d’administration entre les forêts. Le script ne peut également pas fonctionner lorsque vous l’exécutez à partir d’une station de travail qui est jointe à une autre forêt que celle à laquelle les comptes de propriétaire de boîte aux lettres sont jointes.

Étant donné ces conditions, vous pouvez exécuter le script avec plusieurs comptes administratifs dans une seule ouverture de session à l’aide de la commande RunAs.exe . Cette procédure peut être utile si vous avez segmenté les autorisations Active Directory et d’Exchange Server, et ne qu’aucun compte unique qui permet d’administrer tous les serveurs Exchange ou tous les domaines Active Directory. Vous pouvez ouvrir une invite de commande pour exécuter le script en tant que chaque compte administratif. Prenons l’exemple suivant :
RunAs.exe /user:domain\account CMD.EXE
Remarque Vous ne devez pas exécuter plusieurs copies du script en même temps dans le même domaine.

Les champs du fichier d’exportation sont les suivantes : Les champs sont décrits dans l’ordre dans lequel elles sont présentées dans le fichier d’exportation.
  • Nom complet du compte du propriétaire de boîte aux lettres

    Il peut y avoir plus d’une ligne dans le fichier de sortie qui répertorie le même propriétaire de boîte aux lettres. Ce comportement survient lorsque plusieurs autres comptes détiennent des autorisations d’accès complet à la boîte aux lettres à la même boîte aux lettres.
  • Nom de domaine et d’ouverture de session d’un compte doté d’autorisations accès complet à la boîte aux lettres mais pas de l’autorisation Envoyer en tant que

    Le même compte peut apparaître plusieurs fois dans le fichier d’exportation si le compte a accès à plusieurs boîtes aux lettres. Ceci est probablement le cas d’un compte de service d’application ou pour une personne qui gère plusieurs boîtes aux lettres de ressources.
  • Nom complet d’un compte qui dispose de l’autorisation accès complet à la boîte aux lettres, mais pas de l’autorisation Envoyer en tant que

    Ce champ est fourni en plus du champ Nom d’ouverture de sessionpour le rendre plus facile d’identifier le compte.
  • Statut délégué du propriétaire de boîte aux lettres

    Si le propriétaire de la boîte aux lettres dispose de délégués, la valeur du champ est
    A des délégués. Si le propriétaire de la boîte aux lettres n’a pas les délégués, la valeur du champ est No Delegates.
  • État activé ou désactivé du compte du propriétaire de boîte aux lettres

    Ce champ est utile lorsque vous souhaitez identifier les comptes de ressources ou de comptes de boîtes aux lettres entre les forêts. En règle générale, ces comptes sont désactivés.
  • Nom unique complet du compte du propriétaire de boîte aux lettres

    Ce champ est utile lorsque vous souhaitez identifier le domaine et le conteneur du compte du propriétaire de boîte aux lettres.
  • Nom unique complet de la base de données de boîte aux lettres du propriétaire de la boîte aux lettres

    Ce champ comprend la base de données, le groupe de stockage, le serveur et le groupe administratif de la boîte aux lettres.
Dans l’exemple suivant, l’utilisateur qui a le nom d’ouverture de session « NoSendAs » a l’autorisation accès complet à la boîte aux lettres, mais pas l’autorisation de la « boîte aux lettres « mailbox Owner :
« « « Boîte aux lettres propriétaire » » « « « Domain\NoSendAs » » » « « « N° envoyer en tant qu’utilisateur » » » « « « a délégués » » » « « « activé » » » [champs supplémentaires omis]

Configuration de station de travail administrative pour le script

Ce script utilise les interfaces de gestion Exchange pour communiquer avec les serveurs Exchange. Par conséquent, ce script doit être exécuté à partir d’un serveur Exchange ou une station de travail avec administrateur du système Exchange installé.

Modification du fichier d’exportation

Le fichier d’exportation est formaté en tant que texte brut afin que les jeux de caractères de plusieurs langues peuvent être prises en charge de Unicode. Certains éditeurs de texte peuvent être impossible d’afficher ou de modifier le fichier correctement, ou peut-être d’enregistrer le fichier en tant que texte ANSI ou ASCII. L’utilitaire bloc-notes pour Microsoft Windows 2000, Windows XP et Windows Server 2003 peut gérer correctement les fichiers de texte Unicode. En outre, Microsoft Office Excel peut gérer correctement les fichiers de texte Unicode.

Le fichier de sortie est dans un format délimité avec des guillemets triples autour des valeurs de chaque champ. Les guillemets triples servent à rendre l’importation et l’exportation d’Excel plus déterministe. Dans Excel, les guillemets triples deviennent des guillemets simples et sera rétabli pour les guillemets triples lorsque le fichier est enregistré de nouveau en tant que texte Unicode. Consultez les instructions ci-dessous pour ouvrir et enregistrer un fichier d’exportation dans Excel correctement.

Vous pouvez également filtrer un fichier d’exportation sans utiliser Excel à l’aide de l’utilitaire Find.exe ou Findstr.exe. Ces utilitaires sont inclus avec Windows. Ils vous permettent de rechercher des mots dans un fichier et la sortie uniquement les lignes contenant ces mots ou uniquement les lignes qui ne contiennent pas ces mots. Par exemple, si vous souhaitez créer une liste dans le fichier de tous les propriétaires de boîtes aux lettres qui disposent de délégués, utilisez une de ces commandes pour créer un fichier qui contient uniquement les lignes comprenant la chaîne « Has Delegates » :
Find.exe « a les délégués » OriginalFile.txt > HasDelegates.txt

Findstr.exe/c: « a les délégués » OriginalFile.txt > HasDelegates.txt
Un autre exemple, supposons que vous filtrez tous les propriétaires de boîtes aux lettres avec délégués. Le commutateur /V affiche toutes les lignes qui ne correspondent pas aux mots de la recherche. Vous pouvez utiliser ces commandes pour créer un fichier excluant toutes les lignes « Has Delegates » :
Find.exe « Aucun Delegates » OriginalFile.txt > NoDelegates.txt


Find.exe dispose de délégués « /V » OriginalFile.txt > NoDelegates.txt


Findstr.exe/c: « Aucun Delegates » OriginalFile.txt > NoDelegates.txt


Findstr.exe, /V/c: « a les délégués » OriginalFile.txt > NoDelegates.txt
Vous pouvez également utiliser ces commandes pour générer un fichier qui répertorie tous les comptes où un compte de service d’application dispose de l’autorisation de l’accès complet à la boîte aux lettres, mais ne dispose pas de l’autorisation Envoyer en tant que. Le commutateur /I rend la commande insensible à la casse :
Find.exe /I "domain\ServiceAccount" OriginalFile.txt > ServiceAccount.txt


Findstr.exe /I /C:"domain\ServiceAccount" OriginalFile.txt > ServiceAccount.txt
Remarque Si vous utilisez l’utilitaire Find.exe pour créer un fichier filtré, vous devez supprimer les lignes d’en-tête que crée l’utilitaire Find.exe en haut du fichier.

N’utilisez pas de noms de fichier génériques (*. *) avec l’utilitaire Findstr.exe. Si vous utilisez des caractères génériques, chaque ligne dans le fichier de sortie doit être précédée du nom de fichier. Vous devez examiner le fichier de sortie avec soin, après avoir filtré à l’aide de Find.exe ou Findstr.exe afin de vérifier que votre filtre capturé ou exclu les comptes que vous avez prévue.

Dans l’exemple suivant, l’utilisateur qui a le nom d’ouverture de session « NoSendAs » a l’autorisation accès complet à la boîte aux lettres, mais pas l’envoyer sous la forme d’autorisation pour la « boîte aux lettres « mailbox Owner.
"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [additional fields omitted] 

À propos des propriétaires de boîtes aux lettres qui disposent de délégués

Un délégué qui possède généralement des accès complet à la boîte aux lettres (également appelé « super délégué ») ne doit pas accordé l’autorisation Envoyer en tant que. Lorsque le super délégué se connecte directement à la boîte aux lettres du propriétaire boîte aux lettres, le délégué peut envoyer en tant que propriétaire. Lorsque le délégué exploite les fonctionnalités de délégation d’Outlook (Boîtes aux lettres supplémentaires à ouvrir ou dossier d’un autre utilisateur), les messages sont envoyés au nom de propriétaire.

Accordez l’autorisation Envoyer en tant qu’à un super délégué seulement si vous souhaitez que le délégué toujours envoyer en tant que propriétaire de la boîte aux lettres et ne jamais envoyer de la part du propriétaire de boîte aux lettres. Nous vous recommandons de rechercher le fichier d’exportation pour le texte « Has Delegates » puis déterminer si l’un des super délégués répertoriés sont en réalité des délégués du propriétaire de boîte aux lettres.

Seuls les super délégués répertoriés dans le fichier d’exportation. Les délégués ordinaires n’ont pas de l’autorisation accès complet à la boîte aux lettres. En outre, lorsque vous accordez l’autorisation Envoyer en tant qu’à un délégué ordinaire, le délégué sera toujours envoyer en tant que propriétaire de la boîte aux lettres. Cela est vrai même si le délégué ordinaire ne dispose pas de l’autorisation accès complet à la boîte aux lettres. Si vous accordez les autorisations Envoyer en tant qu’à un délégué lorsque vous n’êtes pas sûr, vous pouvez facilement annuler l’autorisation ultérieurement.

Comment ouvrir un fichier d’exportation dans Excel

  1. Démarrez Excel avant d’ouvrir le fichier d’exportation.
  2. Ouvrez le fichier dans Excel en tant que type fichiers texte. L’Assistant Importation de texte démarre.
  3. Dans l’Assistant Importation de texte, modifiez ou acceptez les paramètres suivants :
    • Type de données d’origine: délimité
    • Commencer l’importation à la ligne: 1
    • Origine du fichier: Unicode (UTF-8)
    • Délimiteurs: onglet uniquement
    • Des séparateurs consécutifs comme un: désactivée
    • Délimiteur de texte: « (guillemets doubles)

Comment enregistrer un fichier d’exportation après avoir modifié le fichier dans Excel

  1. Dans le fichier d’exportation, cliquez sur Enregistrer sous.
  2. Enregistrez le fichier en utilisant un autre nom afin que vous conservez une copie non modifiée du fichier d’origine.
  3. Cliquez sur le fichieret cliquez sur Enregistrer sous, entrez un nom de fichier pour enregistrer la sortie, puis cliquez sur texte Unicode dans la liste Type de fichier.

Syntaxe du script

Il s’agit d’un script en mode texte, et il doit être exécuté dans une fenêtre d’invite de commandes, pas à partir de la boîte de dialogue exécuter . Pour ouvrir une fenêtre d’invite de commande, cliquez sur Démarrer, sur exécuter, type
CMD dans la zone Ouvrir , puis cliquez sur
OK.

Journal des erreurs et exporter les fichiers seront enregistrés dans le répertoire d’invite de commande en cours. Vous devez disposer des autorisations pour créer des fichiers dans ce répertoire. Pour obtenir de l’aide de la ligne de commande, entrez la commande suivante :
CSCRIPT AddSendAs.vbs 
Pour exporter les utilisateurs qui ont un accès complet à la boîte aux lettres sans l’autorisation Envoyer en tant que pour un domaine, entrez la commande suivante :
CSCRIPT AddSendAs.vbs [domain controller name] –ExportExample:
CSCRIPT AddSendAs.vbs CORP-DC-1 –Export

Le fichier d’exportation sera généré « Send_As_Export_H_MM_SS.txt ».

Pour importer un fichier d’exportation modifié, entrez la commande suivante :
CSCRIPT AddSendAs.vbs [domain controller name] –Import [filename]

Example:


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

Comment faire pour octroyer l’autorisation Envoyer en tant que pour chaque boîte aux lettres du domaine pour tous les utilisateurs qui disposent déjà de l’autorisation accès complet à la boîte aux lettres pour une boîte aux lettres

Remarque Si vous avez des délégués qui ont également l’autorisation accès complet à la boîte aux lettres de votre organisation, vous ne devez pas utiliser le mode SetAll. Si vous utilisez le mode SetAll dans cette situation, les délégués auront l’autorisation Envoyer en tant que. Ce comportement peut entraîner à qui ils envoient utilisent l’autorisation Envoyer en tant que plutôt qu’envoyer de la part de tous les messages. Vous pouvez corriger ce problème en supprimant l’autorisation Envoyer en tant que qui a été octroyée par erreur au délégué :
CSCRIPT AddSendAs.vbs [domain controller name] –SetAll

Example:


CSCRIPT AddSendAs.vbs CORP-DC-1 –SetAll

Si vous utilisez le mode SetAll, un fichier d’exportation sera généré comme Send_As_Export_H_MM_SS.txt. Vous devez enregistrer ce fichier car il s’agit d’un enregistrement de tous les comptes qui ont été modifiées. Si vous devez réexécuter le script, il ne produirait pas la même liste de comptes, car les comptes déjà ont pu bénéficier de l’autorisation Envoyer en tant que.


Les erreurs que vous rencontrez lors de l’exécution du script seront enregistrés dans le fichier Send_As_Errors_H_MM_SS.txt. Le nom de fichier d’erreur correspondra à l’horodatage heures_minutes_secondes d’un fichier d’exportation associé.

Modification du script

Il peut y avoir des comptes de votre organisation qui dispose d’autorisations sur de nombreux objets, mais que vous ne souhaitez pas modifier les autorisations. Pour réduire la taille du fichier d’exportation, vous pouvez filtrer ces comptes en modifiant la variable FMA_EXCLUSIVE_LIST située en haut du script. Par défaut, cette variable répertorie quelques comptes qui doivent être supprimés dans la sortie du script. Vous pouvez ajouter d’autres comptes en utilisant le format suivant.
& "<Domain\Name>" & OUTPUT_DELIMITER
Par exemple, vous pouvez modifier la valeur de la variable suivante.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
pour qu’il apparaisse comme suit.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER & "Mydomain\Service1" & OUTPUT DELIMITER
Cette modification supprime la liste du compte « Mydomain\Service1 » dans le fichier d’exportation ainsi que « NT AUTHORITY\SELF » et « NT AUTHORITY\SYSTEM ». Notez que la valeur Domain\Name respecte la casse, et qu’il doit apparaître exactement comme il le fait ou se présenterait dans le fichier d’exportation.

Il existe une autre variable modifiable, FMA_EXCLUSIVE_EXSVC, qui a la valeur de par défaut « \Exchange Services » & OUTPUT_DELIMITER. « Exchange Services » désigne le nom d’un compte ayant reçu des autorisations par le biais du connecteur Active Directory dans Exchange Server 5.5 et Exchange 2000 de migration et de coexistence des scénarios. Ce compte est créé dans plusieurs domaines, et il peut apparaître à plusieurs reprises dans le fichier d’exportation s’il n’est pas supprimé.

La variable FMA_EXCLUSIVE_EXSVC accepte uniquement un compte en tant que sa valeur. Le nom de compte n’est pas sensible à la casse. Le compte doit commencer par une barre oblique inverse (\) et ne doit pas inclure le domaine auquel le compte appartient. Le compte sera supprimé pour tous les domaines dans lesquels il se trouve.

Si vous avez utilisé les outils de migration tiers ou des méthodes de synchronisation d’annuaire, un compte différent peut exister dans plusieurs domaines ayant accordé massivement des autorisations aux boîtes aux lettres de l’utilisateur. Dans ce scénario, vous pouvez remplacer le nom de ce compte par « \Exchange Services ».

Conseils et avertissements

  • Ne supprimez pas les fichiers journaux et d’erreur qui sont générés par le script. Ils peuvent être utiles pour la résolution des problèmes ou inverser les modifications ultérieurement. N’oubliez pas que, dès que vous avez accordé l’autorisation Envoyer en tant qu’à un compte, il n’est n’est plus enregistré dans le fichier d’exportation.
  • Si une base de données ou le serveur Exchange est arrêté, le traitement du script sera plus lent. Dans ce cas, vous pouvez trier le fichier d’exportation par base de données et déplacer les lignes qui sont associés à une base de données arrêtée dans un fichier différent pour une importation ultérieure.
  • Le script supprime la sortie de comptes dans lequel le nom d’ouverture de session se termine par « $» ou est NT AUTHORITY\SYSTEM. Ces comptes de système ne doivent pas généralement nécessiter l’autorisation Envoyer en tant qu’et leur suppression du fichier d’exportation considérablement réduit sa taille.
  • Le fichier d’exportation doit être au format Unicode avant qu’il ne peut être importé. Si vous avez enregistré par erreur le fichier en tant que texte ANSI, vous pouvez résoudre ce problème en chargeant le fichier dans le bloc-notes et l’enregistrer en tant que texte Unicode.
  • Si une importation ne fonctionne pas, dépannez avec des comptes test et une seule ligne dans le fichier d’importation. Configurer un compte test possédant une boîte aux lettres sur un serveur Exchange en cours d’exécution et puis accorder l’autorisation accès complet à la boîte aux lettres vers un autre compte de test. N’accordez pas l’autorisation Envoyer en tant que pour l’autre compte de test.
  • Il n’existe aucun mode d’annulation de ce script. Pour annuler les autorisations Envoyer en tant que vous avez accordé avec ce script, vous devez créer un autre script ou les supprimer manuellement. Mode d’annulation n’est fourni que pour éviter l’utilisation de ce script pour supprimer les autorisations Envoyer en tant que pour tous les utilisateurs d’une organisation.
  • Le script ne gère pas correctement un compte qui a été accordé un contrôle total sur un objet utilisateur avec un accès complet à la boîte aux lettres. Le contrôle total inclut l’autorisation Envoyer en tant que mais le script exporte le compte comme s’il n’avait pas l’autorisation Envoyer en tant que. Cela peut augmenter la taille du fichier d’exportation, mais ne se produit à partir de l’importation du fichier et redondante l’octroi des autorisations Envoyer en tant qu’à ces comptes.
  • Comptes d’utilisateurs Active Directory qui ont des noms uniques et contenant des tabulations ou guillemets doubles non concordants ne peut pas être traitées à l’aide de ce script. Le script peut correctement traiter un nom contenant des guillemets doubles concordants tel que le suivant :
    « CN = First « Nickname » Last, DC = domaine, DC = com »
  • Chaque version de Microsoft Excel prend en charge une limite maximale de la ligne différent. Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

    120596 fichiers texte de plus de 65 536 lignes ne peuvent pas être importés à Excel 97, Excel 2000, Excel 2002 et Excel 2003

    Limites de ligne pour Excel 2003 et Excel 2007 sont les suivantes :
    • Lignes d’Excel 2003:65 536
    • Lignes d’Excel 2007:1 048 576
    Si votre fichier de sortie est supérieur à ces limites, vous devez scinder le fichier en sections avant de le charger dans Excel.
  • Le fichier Send_As_Errors répertorie les comptes spécifiques dans le cas où il y a un échec de lecture ou d’écriture. Si d’autres comptes du domaine ont été traités, ces comptes peuvent ont quelque chose en commun qui empêche l’exécution du script. Les problèmes courants sont les suivants :
    • Manque d’autorisations administratives pour afficher ou définir les propriétés des comptes.
    • La banque de boîtes aux lettres Exchange n’est pas en cours d’exécution.
    • La station de travail n’est pas un membre du même domaine.
    • Le compte administratif utilisé n’est pas de la même forêt.
Pour exécuter ce script, copiez et collez toutes les lignes entre début du SCRIPT et fin du SCRIPT dans un éditeur de texte tel que le bloc-notes. Enregistrez le script sous AddSendAs.vbs. DÉBUT DU SCRIPT.
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
SCRIPT DE FIN

Microsoft fournit des exemples de programmation à titre d'illustration uniquement, sans garantie expresse ou implicite. Ceci inclut, mais n'est pas limité à, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les ingénieurs du support technique Microsoft peuvent aider à expliquer la fonctionnalité d'une procédure particulière. Toutefois, ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques.

Pour plus d’informations sur les options de support disponibles auprès de Microsoft, visitez le site Web de Microsoft à l’adresse suivante :Les produits tiers dont traite cet article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute forme de garantie, expresse ou implicite, concernant les performances ou la fiabilité de ces produits.
Propriétés

ID d'article : 912918 - Dernière mise à jour : 17 janv. 2017 - Révision : 1

Commentaires