사용자가 모바일 장치에서 또는 Exchange 2000 Server 및 Exchange Server 2003에서 공유 사서함에서 전자 메일 메시지를 보낼 수 없습니다.

증상

Microsoft Exchange 2000 Server 또는 Microsoft Exchange Server 2003에서 전자 메일 메시지를 보내려고 할 때 전자 메일 메시지를 보낼 수 없습니다. 또한 다음과 같은 배달 못 함 보고서 (Ndr) 중 하나 또는 다음과 같은 오류 메시지 중 하나가 나타날 수 있습니다.

오류 메시지

  • 액세스가 거부 되었습니다.
  • 이 개체에 대 한이 작업을 수행할 수 있는 충분 한 권한이 없습니다. 폴더 연락처 또는 시스템 관리자를 참조 하십시오.
  • 목록에 없는 메시지 오류
  • MAPI_E_NO_ACCESS-2147024891 인
  • 사용자 이름 사용자의 메일 메시지를 전송 하지 못했습니다 (HRESULT:-2147024891 인) 일시 중지 사용자 사용자 이름입니다. (보안 오류-사용자가 사서함에 액세스할 수 없습니다.)
  • 리소스를 찾을 수 없습니다.
참고: 나타난다 "액세스 거부" 오류 메시지 또는 "리소스를 찾을 수 없습니다" 오류 메시지가 Microsoft Outlook Web Access에서 대리인 계정으로 로그인 합니다.

Ndr

  • 이 받는 사람에 게 보낼 수 있는 권한이 없습니다. 시스템 관리자에 게 문의 하십시오.
  • 사서함을 사용 하 여 메시지를 보낼 수 없습니다. 지정한 사용자 대신 메시지를 보낼 수 있는 권한이 없습니다.

영향을 받는 제품

이 문제는 다음 타사 제품을 알려져 있습니다.
  • 연구에서 동작 (테두리) BlackBerry 엔터프라이즈 서버 (옆)
  • 훌륭한 기술 GoodLink 무선 메시징
사용자 지정 MAPI 또는 공동 작업 데이터 개체 CDO 기반 프로그램에서 전자 메일 메시지를 보내는 미칠 수도 있습니다.

전자 메일 메시지를 보내는 서비스 계정을 사용 하는 다른 타사 제품도 영향을 받을 수 있습니다. 이 문제의 영향을 받는 타사 제품을 실행 하는 경우이 문제 해결에 대 한 공급 업체에 문의 하는 것이 좋습니다.

그러나, 것 확인 되었습니다 다음과 같은 다른 공급 업체 제품은이 문제의 영향을 받지 않습니다.
  • Cisco Unity 통합 메시징
  • 교환 위한 퀘스트 마이그레이션 도구
  • Exchange 용 Microsoft ExMerge 유틸리티

원인

이 문제는 다음 조건 중 하나가 참일 경우 발생할 수 있습니다.
  • 전자 메일 메시지를 보내려면 사용 중인 계정에 사서함 소유자로 전자 메일 메시지를 보낼 수 있는 권한이 없습니다.
  • Microsoft Exchange 2000 Server 서비스 팩 3 (SP3)을 실행 하는 6619.4 버전 이상 있는 Store.exe 파일 버전을 함께 합니다. 6619.4 버전 Microsoft 기술 자료의 다음 문서에서 사용할 수 있는 계산 되었습니다.
    915358 핫픽스는 Exchange 2000 Server에서 전체 사서함 액세스 권한의 동작을 변경할 수 없습니다.

  • 7233.51 버전 이상 있는 Store.exe 파일 버전을 함께 Microsoft Exchange Server 2003 s p 1을 실행 중인.
  • Exchange Server 2003 s p 2를 실행 하는 Store.exe 파일 버전을 버전 7650.23 이상 함께. 버전 7650.23 Microsoft 기술 자료의 다음 문서에서 사용할 수 있는 계산 된:
    895949 "사람 이름으로 보내기" 권한 동작 변경 Exchange 2003

    이 그러면은 Exchange Server 2003 s p 2에 포함 되지 않습니다. Exchange Server 2003 SP1 버전의이 변경 사항을 포함 하는 Store.exe 파일 실행 된 Exchange Server 2003 s p 2로 업그레이드 하는 경우 SP2 버전의 새 동작을 유지 하려면이 핫픽스를 설치 해야 합니다. 이 그러면은 Microsoft Exchange Server 2003 s p 3에 포함 됩니다.

보안 문제

"원인" 절에 나와 있는 Store.exe 파일 버전 이전에 사서함 소유자로 보내기 권한을 부여 전체 사서함 액세스 권한이 암시적으로 부여 합니다. 이것은 전체 사서함 액세스 권한이 있는 다른 계정을 사서함 소유자가 보낸 것으로 표시 된 전자 메일 메시지를 보낼 수 의미 합니다.

많은 Microsoft Exchange 고객은 다음과 같은 두 가지 이유로 전체 사서함 액세스 권한에서 이름으로 보내기 권한을 분리 될 요청 했습니다.
  • 전자 메일 스푸핑을 방지 하기.
  • 전자 메일을 확인 하려면 대리인이 보내지는 메시지에 실제 사서함 소유자가 보낸 전자 메일 메시지를 명확히 구분할 수 항상 있습니다.
모든 새 버전의 Exchange 저장소를 사서함 소유자로 전자 메일 메시지를 보낼 사람 이름으로 보내기 권한이 필요 명시적으로. 그러나이 요구 사항에 대 한 세 가지 예외 다음 들입니다.
  • 사서함 소유자 계정에는 사서함 자체에 대 한 명시적인 다른 사람 이름으로 보내기 권한이 필요 하지 않습니다.
  • 사서함에 연결 된 외부 계정에는 명시적인 다른 사람 이름으로 보내기 권한이 필요 하지 않습니다.
  • 또한 전체 사서함 액세스 권한이 있는 대리인 계정에는 명시적인 다른 사람 이름으로 보내기 권한이 필요 하지 않습니다.
이러한 예외에 대 한 자세한 내용은 "추가 정보" 절을 참조 하십시오.

해결 방법

모든 계정에 사서함을 제외 하 고 "원인" 절에서 언급 한 부분 또는 전체 액세스 권한이 부여 됩니다 이제 명시적으로 받아야 이름으로 보내기 권한은 사서함 소유자 계정에 사서함 소유자로 메일을 보내려면. 모바일 장치 사용자의 전자 메일 메시지 전송 등과 같은 기능을 수행 하는 응용 프로그램 서비스 계정이 포함 됩니다.

이름으로 보내기 권한을 사서함 내용이 데이터베이스에 저장 된 수 없는 Active Directory 사용자 개체의 id에 적용 됩니다. 따라서 사서함이 있는 각 사용자 개체의 서비스 계정 이름으로 보내기 권한을 부여 합니다. 전자 메일 메시지를 보내면 아니라 사용자는 특정 사서함 이나 데이터베이스에서 없습니다 전송 됩니다. 사용자는 사서함 소유자 또는 다른 사람 이름으로 보내기 권한을 가진 계정을 수 있습니다.

Exchange Server 실행 하는 서버 또는 데이터베이스 개체 이름으로 보내기 권한을 부여 하 고, 데이터베이스의 모든 사서함에 대 한 사람 이름으로 보내기 권한을 부여 하는 효과 얻을 수 없습니다. Exchange 데이터베이스 개체에 권한을 부여 하면 데이터베이스 자체에 대 한 사용 권한. 데이터베이스의 모든 사서함 사용 권한을 상속 합니다. 그러나 데이터베이스에 사서함을가지고 하 고 다른 사람 이름으로 보내기 권한을 가진 사용자에 게 권한을 부여 하지 않습니다.

참고: Exchange 데이터베이스에 다음으로 받기 권한을 부여 하는 데이터베이스의 모든 사서함에 전체 사서함 액세스 권한을 부여 하는 기능 같습니다. 이 사람 이름으로 보내기 권한의 동작과 다릅니다.

하나의 계정에 대 한 사람 이름으로 보내기 권한을 부여 하는 방법

다른 계정 권한이 사서함 소유자로 보내기에 명시적으로 부여 하려면 다음과이 같이 하십시오.
  1. Active Directory 사용자 및 컴퓨터 관리 콘솔을 시작 합니다.
  2. 보기 메뉴에서 확인 하 고
    고급 기능 옵션을 선택 합니다. 이 옵션을 선택 하지 않으면 보안 페이지 사용자 계정 개체에 표시 되지 않습니다.
  3. 사서함이 있는 사용자 계정의 등록 정보를 엽니다.
  4. 보안 탭을 클릭합니다.
  5. 계정이 되어 있지 않은 경우 그룹 또는 사용자 이름 목록에서 해당 사용자 이름으로 보내기 권한이 있는 계정을 추가 합니다.
  6. 사용 권한 상자에서 해당 계정에 대 한 "다른 사람"에 대 한 허용 권한을 클릭 합니다.
  7. 확인을 클릭합니다.
  8. 영향을 받는 Exchange 서버에서 Microsoft Exchange 정보 저장소 서비스를 다시 시작 합니다.
참고: Microsoft Exchange 정보 저장소 서비스를 다시 시작 하지 않으면 Microsoft Exchange 정보 저장소 서비스가 사용 권한을 캐시 하 여 새 업데이트 됩니다 다음 레지스트리 하위 키에 설정 된 값에 따라 사용 권한을 적용 합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem
값 이름: 사서함 캐시 보존 기간
값 종류: REG_DWORD
기 수: 10 진수
값 데이터: 해당 사서함 정보 캐시 보존 기간 분에서.
이 레지스트리 항목의 기본값은 120 분 (2 시간). 이 레지스트리 항목을 수정 하는 경우 Microsoft Exchange 정보 저장소 서비스를 다시 시작 해야 합니다.

참고: 매우 낮은 값을 시간 제한 값을 설정 하면 서버의 성능이 영향을 미칠 수 있습니다.

여러 계정에 대 한 사람 이름으로 보내기 권한을 부여 하는 방법

사서함에 대 한 사람 이름으로 보내기 권한 없이 전체 사서함 액세스 권한을 가진 계정에 대 한 Active Directory 서비스 도메인을 검색 하는이 문서의 끝에 예제 스크립트가 제공 됩니다. 이러한 보안상의 변경에 의해 영향을 받는 서비스나 리소스 계정의 특성입니다. 스크립트를 검토, 편집 및 다음 다시 가져와서 이러한 권한이 필요한 계정 이름으로 보내기 권한을 부여 하는 내보내기 파일을 생성할 수 있습니다.

모든 사용자 개체를 Active Directory 도메인 또는 컨테이너에서 상속을 통해 이름으로 보내기 권한을 부여할 수도 있습니다. 에이 방법으로 이름으로 보내기 권한을 부여 하면 원치 않는 개체에 대 한 권한을 부여할 수 있습니다. 또한 컨테이너에서 옮겨진 개체의 사용 권한을 잃을 수도 있습니다. 따라서이 방법을 선호 하지 않으며는 보안상의 문제를 구현 하기 전에 신중 하 게 고려해 야.

이 메서드를 사용 하 여 다른 사람 이름으로 보내기 권한을 부여할 계정 이름으로 보내기 권한을 상속 문서의 끝에 참조 되는 스크립트에 표시 됩니다. 나중에이 스크립트를 사용 하 여 이러한 계정을 처리 하려면 상속된 된 다른 사람 이름으로 보내기 권한을 먼저 제거 해야 있습니다.

상속을 사용 하 여 Active Directory 도메인 또는 컨테이너에서 모든 사용자 계정에 하나의 계정에 대 한 이름으로 보내기 권한을 부여 하려면 다음과이 같이 하십시오.
  1. Active Directory 사용자 및 컴퓨터 관리 콘솔을 시작 합니다.
  2. 보기 메뉴에서 확인 하 고
    고급 기능 옵션을 선택 합니다. 이 옵션을 선택 하지 않으면 보안 페이지 도메인 및 컨테이너 개체에 대 한 표시 되지 않습니다.
  3. 도메인 또는 컨테이너의 속성을 열고 보안 페이지를 클릭 합니다.
  4. 고급을 클릭 합니다.
  5. 권한이 필요한 계정이 이미 나열 되지 않으면 추가누르고 해당 계정을 선택 합니다. 그렇지 않은 경우는 편집할 계정을 두 번 누릅니다.
  6. 적용 대상 목록에서 클릭
    사용자 개체입니다.
  7. 계정 이름으로 보내기 권한을 부여 합니다.
  8. 종료 하 고 모든 변경 내용을 저장할 때까지 확인 을 클릭 합니다.

Adminsdholder로 보호 된 계정에 대 한 특별 한 규칙

스크립트를 사용 하 여 도메인 관리자는 사서함 소유자 이름으로 보내기 권한을 부여 하는 경우 이름으로 보내기 권한이 적용 되지 않습니다. 있습니다 않은 사서함을 설정 하지 사용자 계정에 있는 도메인 관리자 권한이 있거나 adminsdholder로 보호 된이.



AdminSDHolder 개체는 Active Directory의 광범위 한 관리 권한을 가진 계정에 대 한 템플릿입니다. 의도 하지 않은 권한 승격을 방지 하기 위해 adminSDHolder 개체에 의해 보호 되는 모든 계정 자체는 adminSDHolder 개체에 표시 되는 값과 일치 하는 사용 권한이 있어야 합니다.



권한이 나 보호 된 계정의 adminSDHolder 개체에서 사용 권한을 변경 하면 백그라운드 작업이 몇 분 이내에 변경 실행 취소 됩니다. 예를 들어, 응용 프로그램 서비스 계정에 도메인 관리자 개체에 이름으로 보내기 권한을 부여 하면, 백그라운드 작업 권한을 자동으로 취소 합니다.



따라서 사용자 계정을 adminSDHolder 개체 자체를 변경 하지 않으면 adminSDHolder 개체에 의해 보호 되는 응용 프로그램 서비스 계정에 권한을 부여할 수 없습니다. AdminSDHolder 개체를 변경한 모든 보호 된 계정에 대 한 액세스 권한이 변경 됩니다. 변경으로 발생할 수 있는 보안 문제를 면밀히 검토 한 후 adminSDHolder 개체에만 변경 해야 합니다.


AdminSDHolder 개체에 의해 보호 되는 계정을 사용 하 여 사서함에 연결 하려면 다음과이 같이 하십시오.
  1. Active Directory 사용자 및 컴퓨터 관리 콘솔을 시작 합니다.
  2. 보기 메뉴에서 확인 하 고
    고급 기능 옵션을 선택 합니다. 이 옵션을 선택 하지 않으면 보안 페이지 사용자 계정 개체에 표시 되지 않습니다.
  3. 사서함 소유자로 사용할 일반 사용자 계정을 만듭니다.
  4. 일반 사용자 계정 Exchange 서버에 사서함을 할당 합니다.
  5. 새 사서함 소유자 계정의 등록 정보를 엽니다.
  6. Exchange 고급 정보 상자에서 보호 된 관리자 계정에 전체 사서함 액세스 권한을 부여 합니다.
  7. 보안 페이지에서 보호 된 관리자 계정 이름으로 보내기 권한을 부여 합니다.
  8. 사서함 소유자 개체의 등록 정보를 종료 하려면 확인 을 클릭 합니다.
  9. 사서함 소유자 계정 개체를 마우스 오른쪽 단추로 클릭 한 다음 계정 사용 안 함 모든 로그온 계정을 사용 하지 않으려면 클릭 합니다.
AdminSDHolder로 보호 되는 계정에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조 하는 다음 문서 번호를 클릭 합니다.

907434 "Send As" 오른쪽 "Send As" Active Directory 사용자 및 컴퓨터에서 구성한 후 사용자 개체에서 오른쪽 제거 스냅인에서 Exchange Server

318180 AdminSDHolder 스레드 전이 구성원 메일 그룹의 영향을

817433 위임 된 사용 권한을 사용할 수 없는 및 상속이 자동으로 해제

306398 AdminSDHolder 개체에 영향을 지난 관리자 계정에 대 한 제어 위임

BlackBerry 기업 서버에 대 한 특수 한 작업

작업 1: BlackBerry 엔터프라이즈 서버는 별도 고유 계정으로 실행 되 고 있는지 확인 하십시오

BlackBerry 기업 서버 관리 작업에 대 한 구체적으로 만든 별도 계정으로 실행 되 고 있는지 확인 하십시오. 기본적으로이 계정은 "BESAdmin." 라고

BlackBerry 기업 서버를 관리 하기 위한 별도 계정이 있는 경우 작업 2로 이동 합니다.


별도 계정이 없는 경우에 별도 계정을 만듭니다. 그런 다음이 계정을 사용 하 여 관리 작업을 수행 합니다. BlackBerry Enterprise Server 4.0 또는 BlackBerry 기업 서버 4.1 실행 하는 경우이 작업을 수행 하는 방법은 BlackBerry 엔터프라이즈 서버 설치 가이드를 참조 하십시오.  BlackBerry Enterprise Server 3.6을 실행 중인이 경우가 작업을 수행 하는 방법에 대 한 자세한 내용은 하는 BlackBerry 엔터프라이즈 서버 2000/2003 설치 및 사용 설명서를 참조 하십시오.

작업 2: BlackBerry Enterprise Server 서비스 계정에 적절 한 권한이 있는지 확인 하십시오

BlackBerry Enterprise Server 서비스 계정에 적절 한 권한이 있는지 확인 하십시오.

참고: 도메인에 계정이 있는 경우 계정이 면 Domain Users 그룹의 구성원 인지 확인 합니다. 도메인 컨트롤러에서 계정이 기본 제공 관리자 그룹의 구성원 이어야 합니다.
  1. BlackBerry 엔터프라이즈 서버에서 다음이 단계를 수행 합니다.
    1. 계정이 로컬 관리자 그룹의 구성원 인지 확인 합니다.
    2. 계정에 "로컬로 로그온" 및 "를 서비스로 로그온" 사용 권한을 할당 합니다.
  2. 관리 그룹 수준에서 부여 Exchange 보기 권한만 있는 관리자 권한이 있습니다. 이렇게 하려면, 다음 단계를 수행하십시오.
    1. Exchange System Manager에서 첫 번째 Exchange Server 관리 그룹 이름을 마우스 오른쪽 단추로 클릭 한 다음 제어 위임을클릭 합니다.
    2. BlackBerry Enterprise Server 서비스 계정이 Exchange 보기 권한만 있는 관리자 역할을 가진 것으로 나열 되어 있는지 확인 합니다.
  3. "다른 이름으로 받기" 및 각 Exchange 서버에 대해 서버에서 "정보 저장소 관리" 권한 수준 "으로 보내기" 권한을 부여 합니다. 이렇게 하려면, 다음 단계를 수행하십시오.
    1. Exchange System Manager 첫 번째 Exchange Server 관리 그룹 이름을 마우스 오른쪽 단추로 클릭 한 다음 확장의
      서버 그룹입니다.
    2. Exchange 서버를 마우스 오른쪽 단추로 클릭 합니다.
      속성클릭 합니다
      보안.
    3. 위 창에서 BlackBerry Enterprise Server 서비스 계정을 선택 합니다. 아래쪽 창에서 이름으로 보내기 "," "수신으로" 및 "정보 저장소 관리" 권한이 설정 되어 있는지 확인
      허용합니다.
    4. 3b 단계 및 3 c 각 Exchange 서버에 대해 반복 합니다.
  4. "Send As" 허용 "으로 받기," 및 "관리 정보 저장소" 사서함 저장소 사용 권한을. 이렇게 하려면, 다음 단계를 수행하십시오.
    1. Exchange System Manager 첫 번째 Exchange 관리 그룹 이름을 마우스 오른쪽 단추로 클릭 한 다음 확장의
      서버 그룹입니다.
    2. 첫 번째 사서함 저장소 그룹을 확장 각 사서함 저장소를 마우스 오른쪽 단추로, 속성을 클릭합니다 하 고을 클릭합니다
      보안.
    3. 위 창에서 BlackBerry Enterprise Server 서비스 계정을 선택 합니다. 아래쪽 창에서 이름으로 보내기 "," "수신으로" 및 "정보 저장소 관리" 권한이 설정 되어 있는지 확인
      허용합니다.
    4. 각 Exchange 서버에 각 사서함 저장소에 대 한 단계 4b와 4c를 반복 합니다.
  5. Active Directory 사용자 및 컴퓨터 스냅인을 다음과 같이:
    1. 사용 권한을 추가할 사용자를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.
    2. 보안 탭에서 BlackBerry Enterprise Server 서비스 계정을 추가 하 고 다음을 선택 하면
      사람 이름으로 보내기 확인란입니다.
Exchange Server 2003을 실행 하지 않는 경우 작업 3을 참조 하십시오.

작업 3: BlackBerry 기업 서버에 캐시를 지우려면

Exchange 저장소에서 사용 권한을 캐시를 지우려면 Blackberry 관련 서비스를 다시 시작 하 고 Microsoft Exchange 정보 저장소를 다시 시작 합니다. Exchange 저장소를 다시 시작 하면 새로 추가 된 이름으로 보내기 권한을 Exchange 저장소에 "BESAdmin" 계정에 권한을 부여 하려면 테두리 Blackberry 관련 서비스를 다시 시작 해야 합니다.

자세한 내용

Exchange 사서함 및 폴더 액세스 권한은 Active Directory와 Microsoft Exchange 데이터베이스 간에 분할 됩니다. 그러나 두 종류의 권한은 Active Directory 사용자 관리 콘솔에 설정 되어 있지만 권한은 각각 두 개의 다른 위치에 저장 됩니다.

일반적으로 개체에 대 한 보안 페이지에서 설정 합니다 경우에 Active Directory 사용 권한. Exchange 고급 정보의 사서함 권한을 페이지에서 설정 된 경우에 Exchange 데이터베이스 사용 권한입니다.

MsExchMailboxSecurityDescriptor Active Directory 특성은 실제 사서함 권한의 하위 집합의 백업 복사본을. 내부적으로 교환 하 여 다양 한 용도로 또한 msExchMailboxSecurityDescriptor 특성 관리자 지원 되는 인터페이스를 사용 하 여 권한을 할당 하는 경우 현재 유효 권한 일치 하도록 업데이트 됩니다. 그러나 msExchMailboxSecurityDescriptor 특성을 관리자가 직접 수정 변경 됩니다 Exchange 저장소에 전파 하 고 변경 내용이 적용 되지 것입니다. 실제 사서함 권한을 사용 하 여 동기화 할 아닙니다. 읽기 또는 쓰기 권한을 사서함 msExchMailboxSecurityDescriptor 특성을 사용 하지 마십시오.
자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.

310866 정보 저장소에 있는 사서함에 Exchange Server 2003과 Exchange 2000 Server 사서함 권한을 설정 하는 방법


전체 사서함 액세스 권한에 Exchange 데이터베이스 저장소 권한이입니다. 이름으로 보내기 권한이 있는 Active Directory 사용 권한이입니다. Exchange 시스템이이 문서에서 설명 하는 파일의 변경 내용을 확인 하지 않았습니다 설정을 사람 이름으로 보내기 권한의 경우 Exchange Store.exe 하기 전에 보낸 사람에 게는 전체 사서함 액세스 권한을 이미 했습니다.

전체 사서함 액세스 권한이 있는 사람 이름으로 보내기 권한 포함 시키면 Exchange 서버 관리자는 자신이 관리 하는 서버의 모든 사서함에 대 한 효과적인 사람 이름으로 보내기 권한을 부여할 수 있게 되었습니다. 전체 사서함 액세스 권한에서 이름으로 보내기 권한을 분리 하 여 Active Directory 관리자 이제 차단할 수이 이렇게 사람 이름으로 보내기 권한을 Active Directory 사용 권한과 Exchange 저장소 사용 하지 않아. 따라서 프로세스가 필요 하지 않습니다 Exchange 관리자의 제어 합니다.

사서함 소유자

사서함 소유자는 특정 사서함에 대 한 글로벌 고유 식별자 (GUID)를 전달 하는 msExchMailboxGUID 특성을 Active Directory 사용자 계정으로 정의 됩니다. 전체 포리스트에서 한 계정만 특정 사서함에 대 한 GUID를 수행할 수 있습니다. Guid가 동일한 두 번째 소유자를 설정 하려고 하면 Active Directory에 오류가 발생 하 여 변경 내용을 거부 합니다.


사용자 사서함에서 사용할 계정 또는 Active Directory 계정에 연결 되지 않은 사서함을 연결할 때, 사서함 GUID가 자동으로 설정 해당 계정에. 그는 거의 없으며 관리자가 사서함 Guid를 직접 설정 하는 것이 좋습니다.

연결 된 외부 계정

일반적인 Exchange 구성 리소스 포리스트에 Exchange를 설치 하는 것입니다. 리소스 포리스트는 사서함이 있는 시스템의 사용자 계정과 다른 포리스트에 포리스트. MsExchMailboxGUID 특성 Exchange 서버와 동일한 포리스트에 있는 개체에만 설정할 수 있기 때문에 문제가 발생 합니다.

사서함 사용이 가능한 Exchange 서버 포리스트의 계정에이 문제에 대 한 해결책이입니다. 그런 다음 Microsoft Windows NT 4 도메인 이나 다른 포리스트의 하나로이 사서함 사용이 가능한 계정을 연결합니다. 이렇게 하려면 연결 된 외부 계정 권한을 부여 합니다. 하나의 계정만 연결 된 외부 계정 권한을 부여할 수 있습니다. 선택한 계정을 다른 포리스트에 있어야 합니다.

연결 된 외부 계정 권한을 설정 하면, 외부 계정에 대 한 SID 값 사서함 소유자의 msExchMasterAccountSID 특성에 쓰는. 따라서 이것이 권한을 전혀 msExchMasterAccountSID 특성의 값을 제어 하는 편리한 방법 이지만. 다음 msExchMasterAccountSID 특성이 설정 되어 외부 계정 SID 액세스 부여 됩니다 교환 된 실제 사서함 소유자 계정이 소유 하 고 있는.

참고: Active Directory에 대 한 모든 액세스를 Exchange 액세스에만 적용 됩니다. 또한 모든 권한이 예상 대로 작동 하는 연결 된 외부 계정 권한을 설정한 후 사서함 소유자 계정을 로그온에 사용할 수 없는 것으로 표시 해야 합니다.

자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.

300456 클라이언트 권한 및 Exchange 2000에서 할당 한 후 유지 되지 않는다

대리인 시나리오

대리인은 다른 사서함과 해당 사서함 소유자 대신 전자 메일 메시지를 보낼 수에 대 한 부분 액세스 권한이 부여 된 사용자. 일반적인 대리인 시나리오로 보좌관 임원의 일정에 대 한 대리인 액세스 권한을 부여 하는 것입니다. 일반적으로 대리자 읽고 업데이트할 수 있습니다. 또한 대리자는 담당자를 대신 하 여 전자 메일 메시지에 응답할 수 있습니다.

대신 보내기 권한을 부여 하 고 사용 권한을 위임 하려면 다음 두 가지 인터페이스를 사용할 수 있습니다.
  • 사서함 소유자 개체의 Exchange 일반에서 권한 대신 보내기 대화 상자를 부여 합니다.
  • Microsoft Office Outlook 대리인 대화 상자를 사용 합니다.
두이 방법 모두 사서함 publicDelegates 특성을 설정 합니다. 이 특성에 나열 된 모든 사용자는 사서함 소유자에 대 한 사용 권한 대신 보내기. 해당 대리인이 보낸 사람 상자에 소유자의 이름이 있는 전자 메일 메시지를 보내면 대리인 및 되지 또는 사서함 소유자로 전자 메일 메시지가 전송 됩니다. 전자 메일 메시지의 보낸 사람 상자에 다음 값이 표시 됩니다.
<대리인> <사서함 소유자> 대신
경우도, Outlook에서 publicDelegates 특성을 설정 하려면 못할 수 있습니다.
자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.

Outlook에서 액세스 위임한 후 사용자에 게 329622 "대신 보내기" 권한이 할당 되지 않는다


사서함에 대리인 액세스를 부여 하면 사서함 폴더 중 하나에 대 한 액세스를 부여 하지 않는 경우에 대리자 대신 보내기 권한 사용할 수 있습니다. 하는 대리인에 게 주어진 기본 권한이 권한 대신 보내기입니다. 사서함 폴더를 액세스할 수 있는 권한은 별도 권한이 며 대리인 권한과 함께 부여 되어야 합니다. 일반적으로 대리인에 게 권한을 부여한 개별 폴더에 액세스 하려면 Outlook을 사용 합니다. 이렇게 하려면 Outlook의 파일 메뉴에서 열기 를 클릭 하 고 다른 사용자의 폴더를 클릭 합니다.

대리자에 추가 된 사서함으로 표시 하 여 사서함을 열 수 또는
Outlook 프로필의 고급 탭입니다. 이 메서드를 사용 하면 사용자 사서함이 대리인의 Outlook 폴더 트리에 표시 됩니다. 또한이 메서드 대리자에 사용 권한을 부여 하면 사서함의 모든 폴더에 액세스할 수 있습니다.

대리인이 경우에 따라 대신 보내기 권한 있고 때도 이름으로 보내기 권한의을 할 수 있습니다. 이러한 두 권한을 갖도록 대리인을 구성 하려면 다음과이 같이 하십시오.
  • 대리인을 전체 사서함 액세스 권한을 부여 합니다. Outlook을 통해이 작업을 수행할 수 없습니다. 대신 Active Directory 관리자가 사서함 소유자 계정에 다운로드 해야 합니다. 사서함의 모든 폴더에 대해 소유자 권한을 부여 하면, 경우에 전체 사서함 액세스 사용 권한과 동일한 사용 권한이 아닙니다.
  • 대리자 이름으로 보내기 권한을 부여 하지 마십시오. 대리자 이름으로 보내기 권한을 부여 하면 대리인에서 보내는 모든 전자 메일 메시지 이름으로 보내기 권한을 사용 하 여 수행 됩니다. 대리자 대신 보내기 권한 사용 하 여 수 없습니다.
이 경우 대신 보내기 권한 사용 하려면 해당 대리인은 자신의 사서함에 로그온 해야 합니다. 대리자에 회신 하는 경우 폴더 중 하나에 이미는 전자 메일 메시지를 전달, 사용자를 대신 하 여 전자 메일 메시지가 자동으로 보내집니다. 대리자 사용자 대신 새 전자 메일 메시지를 만든 경우 사용자 대신 보낼 전자 메일 메시지의 보낸 사람 상자에 사용자 이름을 입력 해야 있습니다.

대리인 여부 사용자 폴더나 전체 사서함을 보조 사서함으로 열었는지와 상관 없이 각자의 사서함이 현재 Outlook 프로필의 주 사서함으로 사용자 로부터 전송 되는 모든 전자 메일 메시지 대신 보내기 권한 사용 합니다.

대리자 원할 때 전자 메일 메시지를 보낼 때 해야 로그온 할 사서함을 사서함만 여는 별도 Outlook 프로필을 사용 하 여. 이 프로필에 로그온 되어 있는 동안 대리인이 보내는 전자 메일 메시지를 자동으로 전송 됩니다.

사람 이름으로 보내기 권한 없이 전체 사서함 액세스 권한을 갖는 계정 찾기

이 섹션에 설명 되어 있는 예제 스크립트는 사용자 계정 이름으로 보내기 권한 없이 사서함에 전체 사서함 액세스 권한이 부여 된 곳을 한 번에 하나의 Active Directory 도메인을 검색할 수 있습니다.


중요: 사용 권한, 변경 하기 전에 ""대리인이 있는 사서함 소유자 정보절을 참조 하십시오.

스크립트는 다음과 같은 세 가지 모드:
  • 내보내기 전체 사서함 액세스 권한은 있지만 사람 이름으로 보내기 권한이 아닌 권한이 있는 사용자의 목록을 출력할 수 있습니다. 사람 이름으로 보내기 권한을 있지 않을 모든 계정을 제거 하려면 메모장 이나 다른 편집기에서이 목록을 검토할 수 있습니다.
  • 가져오기 받을 사람 이름으로 보내기 권한이 부여 되어야 하는 전체 사서함 액세스 권한을 갖는 사용자 목록을 가져올 수 있습니다. 참고 전체 사서함 액세스 권한과 권한을 모두 부여 하도록이 스크립트를 사용할 수 없습니다. 각 계정 이름으로 보내기 권한을 부여 하 여 전체 사서함 액세스 권한이 있어야 합니다.
  • SetAll 특정 사서함에 대 한 전체 사서함 액세스 권한이 이미 지정 되어 있는 도메인의 모든 사용자에 게 권한을 부여할 수 있습니다. 로그 파일은 내보내기 파일과 같은 형식으로 생성 됩니다. 내보내기 파일을 편집 하지 않고 내보내기 및 가져오기 모드를 실행 하는 것과 같습니다.
참고: 이 스크립트에는 실행 취소 함수가 없습니다.

스크립트에 필요한 권한

있는 사서함 소유자 계정과 동일한 포리스트의 관리 계정을 사용 하 여 로그온 할 때 스크립트를 실행 해야 합니다. 포리스트 간 관리 권한이 있는 계정을 사용 하 여 스크립트가 작동 하지 않을 수 있습니다. 스크립트를 사서함 소유자 계정이 가입 된 포리스트와 다른 포리스트에 가입 되어 있는 워크스테이션에서 실행 하면 되지 사용할 수도 있습니다.

이러한 상황 실행할 수 있습니다 스크립트 여러 관리자 계정을 사용 하 여 단일 로그온 세션에서 RunAs.exe 명령을 사용 하 여. 이 절차는 Exchange Server 및 Active Directory 사용 권한 분할 되어 모든 Active Directory 도메인 또는 모든 Exchange 서버를 관리할 수 있는 단일 계정이 있는 경우 유용할 수 있습니다. 각 관리 계정으로 스크립트를 실행 하려면 명령 프롬프트를 열 수 있습니다. 다음 예를 살펴보겠습니다.
RunAs.exe /user:domain\account CMD.EXE
참고: 동일한 도메인에 대해 동시에 스크립트의 복사본을 여러 개 실행 하면 안 됩니다.

내보내기 파일의 필드는 다음과 같습니다. 내보내기 파일에 표시 되는 순서 필드를 설명 합니다.
  • 사서함 소유자 계정의 이름 표시

    동일한 사서함 소유자를 나열 하는 출력 파일에 한 줄 이상 있을 수 있습니다. 이 문제는 서로 다른 여러 계정이 동일한 사서함에 전체 사서함 액세스 권한을 갖는 경우에 발생 합니다.
  • 사람 이름으로 보내기 권한이 아닌 있지만 전체 사서함 액세스 권한을 가진 계정의 도메인 및 로그온 이름

    동일한 계정이 여러 사서함에 액세스를 권한이 있는 계정의 경우 내보내기 파일 전체에서 여러 번 나타날 수 있습니다. 이것은 여러 개의 리소스 사서함을 관리 하는 사람이 나 응용 프로그램 서비스 계정의 경우 될 수 있습니다.
  • 전체 사서함 액세스 권한은 있지만 아닌 이름으로 보내기 권한을 가진 계정의 이름을 표시 합니다.

    이 필드는 쉽게 계정을 식별 하는 로그온 이름필드와 함께 제공 됩니다.
  • 사서함 소유자의 대리인 상태

    사서함 소유자의 대리인 있으면 필드 값이
    대리자가있습니다. 사서함 소유자의 대리인 없음 있으면 필드 값이 없는 대리자입니다.
  • 사서함 소유자 계정의 활성화 또는 비활성화 상태

    이 필드를 식별 리소스 계정 또는 포리스트 간 사서함 계정 만들려는 경우에 유용 합니다. 일반적으로이 계정은 비활성화 됩니다.
  • 사서함 소유자 계정의 전체 고유 이름

    이 필드는 도메인 및 사서함 소유자 계정의 컨테이너를 식별 하려는 경우에 유용 합니다.
  • 사서함 소유자의 사서함 데이터베이스에 대 한 전체 고유 이름

    이 필드는 데이터베이스, 저장소 그룹, 서버 및 사서함에 대 한 관리 그룹을 포함합니다.
다음 예제에서는 사용자에 게 로그온 이름 "NoSendAs" 전체 사서함 액세스 권한은 있지만 사람 이름으로 보내기 권한은 사서함 "사서함 소유자"에 있습니다.
"" "사서함 소유자" "" "" "Domain\NoSendAs" "" "" "아니요 보낼 사용자로" "" "" "에 대 한 대리인" "" "" "사용" "" [추가 필드 생략]

스크립트용 관리 워크스테이션 구성

이 스크립트는 Exchange 서버와 통신 하기 위해 Exchange 관리 인터페이스를 사용 합니다. 따라서이 스크립트 실행 해야 워크스테이션 또는 Exchange 서버에서 Exchange 시스템 관리자를 사용한 설치.

내보내기 파일 편집

내보내기 파일 유니코드 일반 텍스트 여러 언어의 문자 집합을 수용할 수 있습니다 형식. 일부 텍스트 편집기 제대로 보거나 파일을 편집할 수 없습니다 또는 해당 파일을 ANSI 나 ASCII 텍스트로 저장할 수 있습니다. Windows Server 2003, Windows XP 및 Microsoft Windows 2000 메모장 유틸리티 유니코드 텍스트 파일을 올바르게 처리할 수 있습니다. 또한 Microsoft Office Excel 유니코드 텍스트 파일을 올바르게 처리할 수 있습니다.

각 필드 값 앞뒤 세 개의 따옴표를 사용 하 여 탭 구분 형식으로 출력 파일이 있습니다. 세 개의 따옴표 가져오기 및 내보내기 excel 보다 명확히 구분 되도록 사용 됩니다. Excel에서 세 개의 따옴표는 단일 인용 부호를 되 하 고 파일을 유니코드 텍스트로 다시 저장 하는 경우 인용 부호를 3 중으로 되돌아갑니다. 올바르게 열고 Excel에서 내보내기 파일을 저장 하려면 다음 지침을 참조 하십시오.

Find.exe 유틸리티 또는 Findstr.exe 유틸리티를 사용 하 여 Excel을 사용 하지 않고 내보내기 파일을 필터링 할 수 있습니다. 이 유틸리티는 Windows에 포함 되어 있습니다. 파일의 단어를 검색 하 고 해당 단어가 포함 된 줄만 하거나 해당 단어가 포함 되지 않는 줄만 출력할 수 있습니다. 예를 들어, 파일에 대리인이 있는 모든 사서함 소유자 목록을 확인 하려면 다음이 명령 중 하나를 만드는 데 "Has Delegates" 문자열이 있는 줄만 포함 하는 파일:
Find.exe "대리인에" OriginalFile.txt > HasDelegates.txt

"대리인에" Findstr.exe /c: OriginalFile.txt > HasDelegates.txt
또 다른 예로, 대리인이 있는 모든 사서함 소유자를 필터링 한다고 가정 합니다. /V 스위치는 검색 단어와 일치 하지 않는 모든 줄을 출력 합니다. "Has Delegates" 줄을 모두 제외 하는 파일을 생성 하려면 다음이 명령 중 하나를 사용할 수 있습니다.
Find.exe "대리인 없음" OriginalFile.txt > NoDelegates.txt


Find.exe /V "대리인에" OriginalFile.txt > NoDelegates.txt


Findstr.exe /c: "대리인 없음" OriginalFile.txt > NoDelegates.txt


"대리인에" Findstr.exe /V /c: OriginalFile.txt > NoDelegates.txt
위치 응용 프로그램 서비스 계정에 전체 사서함 액세스 권한이 없는 사람 이름으로 보내기 권한을 모든 계정 목록이 들어 있는 파일을 생성 하려면 이러한 명령을 사용할 수도 있습니다. /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" 전체 사서함 액세스 권한이 있지만 사람 이름으로 보내기 권한은 사서함 "사서함 소유자"에 있습니다.
"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [additional fields omitted] 

대리인이 있는 사서함 소유자 정보

대리인이 액세스할 수 있는 전체 사서함 (라고도 한 "super-delegate") 일반적으로 이름으로 보내기 권한을 부여 하지 않을. 있는 super-delegate가 사서함 소유자의 사서함에 직접 로그온 로그, 대리인 소유자로 보낼 수 있습니다. 대리인이 Outlook의 대리인 기능 (추가로 열 사서함 또는 다른 사용자의 폴더 열기)을 사용 하는 경우 소유자를 대신 하 여 메시지를 보냅니다.

대리인이 해당 사서함 소유자로 보내기를 항상 하 고 사서함 소유자 대신 하 여 보낼 수 없도록 하는 경우에 super-delegate에 사람 이름으로 보내기 권한을 부여 합니다. "Has Delegates" 텍스트에 대 한 내보내기 파일을 검색할 사서함 소유자의 대리인에 실제로 같거나 그 상위 대리자 중 하나 인지 확인 하는 것이 좋습니다.

상위 대리자만 내보내기 파일에 나열 됩니다. 일반 대리인에 전체 사서함 액세스 권한을 갖지 않습니다. 또한 일반 대리인에 사람 이름으로 보내기 권한을 부여 하면 대리인 사서함 소유자로 보내기 항상 됩니다. 일반 대리인에 전체 사서함 액세스 권한이 없는 경우에 마찬가지입니다. 의도 하지 않은 경우 대리자에 다른 사람 이름으로 보내기 권한을 부여한, 경우 나중에 권한을 간단히 취소할 수 있습니다.

Excel에서 내보내기 파일을 여는 방법

  1. 내보내기 파일을 열기 전에 Excel을 시작 합니다.
  2. 텍스트 파일 형식으로 excel에서 파일을 엽니다. 텍스트 가져오기 마법사가 시작 됩니다.
  3. 텍스트 가져오기 마법사에서 변경 하거나 다음 설정을 적용 합니다.
    • 원본 데이터 형식: 구분
    • 구분 시작 행: 1
    • 원본 파일: 유니코드 (utf-8)
    • 구분 기호: 탭을
    • 연속 된 구분 기호를 하나로 처리: 표시 되지 않은
    • 텍스트 묶음 기호: "(이중 인용 부호)

내보내기 파일을 Excel에서 파일을 편집한 다음 저장 하는 방법

  1. 내보내기 파일에서 다른 이름으로 저장을 클릭 합니다.
  2. 편집 되지 않은 원래 파일 복사본을 유지할 수 있도록 다른 이름을 사용 하 여 파일을 저장 합니다.
  3. 파일, 다른 이름으로 저장을 클릭 하 고 출력을 저장할 파일 이름을 입력 한 다음 파일 형식 목록에서 유니코드 텍스트 를 클릭.

스크립트 구문

텍스트 모드 스크립트 이며 실행 대화 상자에서가 아니라 명령 프롬프트 창에서 실행 해야 합니다. 명령 프롬프트 창을 열려면 시작, 실행을 형식
열기 상자에서 CMD
OK.

오류 로그 및 내보내기 파일은 현재 명령 프롬프트 디렉터리에 저장 됩니다. 이 디렉터리에 있는 파일을 만들 수 있는 권한이 있어야 합니다. 명령줄 도움말을 보려면 다음 명령을 입력 하십시오.
CSCRIPT AddSendAs.vbs 
도메인에 대 한 사람 이름으로 보내기 권한 없이 전체 사서함 액세스 권한이 있는 사용자를 내보내려면 다음 명령을 입력 하십시오.
CSCRIPT AddSendAs.vbs [domain controller name] –ExportExample:
CSCRIPT AddSendAs.vbs CORP-DC-1 –Export

내보내기 파일을 "Send_As_Export_H_MM_SS.txt." 생성 됩니다.

편집한 내보내기 파일을 가져오려면 다음 명령을 입력 하십시오.
CSCRIPT AddSendAs.vbs [domain controller name] –Import [filename]

Example:


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

사서함에 대 한 전체 사서함 액세스 권한이 이미 있는 모든 사용자에 대해 도메인의 각 사서함에 대 한 사람 이름으로 보내기 권한을 부여 하는 방법

참고: 대리인 권한이 조직에 전체 사서함 액세스 권한이 있는 경우 SetAll 모드를 사용 하지 해야 합니다. 이 상황에서 SetAll 모드를 사용 않으면 대리인으로 보내기 부여 됩니다. 이 문제는 권한 대리인이 대신 다른 이름으로 보내기 권한을 사용 하 여 전송 되는 모든 전자 메일 메시지를 발생할 수 있습니다. 대리인에 게 잘못 부여 된 사람 이름으로 보내기 권한을 제거 하면이 문제를 해결할 수 있습니다.
CSCRIPT AddSendAs.vbs [domain controller name] –SetAll

Example:


CSCRIPT AddSendAs.vbs CORP-DC-1 –SetAll

SetAll 모드를 사용 하면 Send_As_Export_H_MM_SS.txt로 내보내기 파일이 생성 됩니다. 변경 된 모든 계정에 대 한 기록 이기 때문에이 파일을 저장 해야 합니다. 스크립트를 다시 실행 하는 경우 거래처는 이미 부여 된 권한을 있기 때문에 동일한 계정 목록이 출력 되지 않습니다.


스크립트를 실행 하는 동안 발생 하는 오류는 Send_As_Errors_H_MM_SS.txt 파일에 저장 됩니다. 오류 파일 이름은 연결된 내보내기 파일의 hours_minutes_seconds 타임 스탬프를 일치 합니다.

스크립트 수정

사용자 조직에 많은 개체에 대 한 사용 권한이 있는 계정이 있을 수 있지만 사용 권한을 변경 하지 않으려는 경우. 내보내기 파일의 크기를 줄이기 위해 스크립트의 위쪽에 있는 FMA_EXCLUSIVE_LIST 변수를 수정 하 여 이러한 계정을 필터링 할 수 있습니다. 이 변수는 기본적으로 스크립트 출력에 표시 되지 않는 계정을 몇 가지 나열 합니다. 다음 형식을 사용 하 여 계정을 더 추가할 수 있습니다.
& "<Domain\Name>" & OUTPUT_DELIMITER
예를 들어 다음 변수의 값을 변경할 수 있습니다.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
다음과 같이 표시 됩니다.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER & "Mydomain\Service1" & OUTPUT DELIMITER
이 변경 "NT AUTHORITY\SELF" 및 "NT 권한 \ 시스템." 함께 내보내기 파일에 "Mydomain\Service1" 계정 목록을 표시 하지 않습니다. Domain\Name 값은 대/소문자를 그대로 정확 하 게 또는 내보내기 파일에 나타나야 합니다 유의 하십시오.

다른 편집 가능한 변수에 기본값 "\Exchange 서비스" 및 OUTPUT_DELIMITER를 가진 FMA_EXCLUSIVE_EXSVC 있습니다. "Exchange 서비스는" Exchange Server 5.5와 Exchange 2000 마이그레이션 및 공존 시나리오에서 Active Directory Connector를 통해 권한이 부여 된 계정 이름. 이 계정은 여러 도메인에 만들어지고 표시 되는 경우 내보내기 파일에 반복적으로 나타날 수 있습니다.

FMA_EXCLUSIVE_EXSVC 변수는 값으로 계정이 하나만 허용합니다. 계정 이름은 대 소문자를 구분 합니다. 계정은 백슬래시 문자 (\)로 시작 하 고 해당 계정이 속하는 도메인은 포함 되지 않습니다. 계정에 존재 하는 모든 도메인이 생략 됩니다.

타사 마이그레이션 도구나 디렉터리 동기화 방법을 사용한 경우 사용자 사서함에 광범위 하 게 부여 된 사용 권한을 가진 여러 도메인에 다른 계정이 있을 수 있습니다. 이 시나리오에서 대신 사용할 수 있습니다 해당 계정 이름을 "\Exchange 서비스."

팁 및 주의 사항

  • 스크립트에 의해 생성 되는 로그 및 오류 파일을 버리지 마십시오. 로그 나 스크립트로 수 있습니다. 기억으로 계정 이름으로 보내기 권한을 부여 하는 것은 더 이상 기록 되지 내보내기 파일에 없습니다.
  • 있는 Exchange 서버 또는 데이터베이스가 다운 되 면 스크립트 처리 속도가 느려집니다. 이런 경우에서 내보내기 파일 데이터베이스에 의해 정렬할 수 있으며 다른 파일을 나중에 가져올 중지 된 데이터베이스와 관련 된 줄을 이동.
  • 스크립트에는 계정의 로그온 이름을 "$"로 끝나는 위치나 NT 권한 \ 시스템은 출력을 하지 않습니다. 이러한 시스템 계정 이름으로 보내기 권한을 일반적으로 안 하 고 크기를 줄입니다 크게 내보내기 파일에서 제거 합니다.
  • 내보내기 파일은 가져올 수 있습니다 전에 유니코드 형식에서 이어야 합니다. 파일을 ANSI 텍스트로 잘못 저장 한를 유니코드 텍스트로 저장 하 고 메모장에서 파일을 로드 하 여이 문제를 해결할 수 있습니다.
  • 가져오기 작동 하지 않는 경우 테스트 계정 및 가져오기 파일에 한 줄을 사용 하 여 해결 합니다. 실행 중인 Exchange 서버에 사서함이 있는 테스트 계정을 구성 하 고 다른 테스트 계정에 전체 사서함 액세스 권한을 부여 해야 합니다. 테스트 계정에 권한을 부여 하지 마십시오.
  • 이 스크립트는 Undo 모드가 없습니다. 하려면이 스크립트로 부여한 다른 사람 이름으로 보내기 권한을, 다른 스크립트를 생성 하거나 수동으로 제거 해야 합니다. 조직의 모든 사용자에 대 한 사람 이름으로 보내기 권한을 제거 하려면이 스크립트의 사용을 방지 하기 위해 Undo 모드는 제공 되지 않습니다.
  • 스크립트가 전체 사서함 액세스 권한과 함께 사용자 개체의 모든 권한을 부여 받은 계정을 제대로 처리 하지 않습니다. 모든 권한 사람 이름으로 보내기 권한이 포함 되지만 스크립트 계정 이름으로 보내기 권한이 없는 것이 마치 내보냅니다. 내보내기 파일의 크기를 늘릴 수 있습니다이 있지만 않습니다 파일을 가져오고 이러한 계정에 다른 사람 이름으로 보내기 권한을 중복 부여에서 발생 합니다.
  • 고유 이름에 탭 이나 서로 일치 하지 않는 큰따옴표와 active Directory 사용자 계정은이 스크립트로 처리할 수 없습니다. 이 스크립트는 다음과 같은 일치 하는 이중 인용 부호를 포함 하는 이름을 올바르게 처리할 수 있습니다.
    "CN = 첫 번째"별명"성, DC = 도메인, DC = com"
  • 각 버전 Excel의 최대 줄도 지원합니다. 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.:

    120596 65, 536 행 보다 큰 텍스트 파일을 Excel 97, Excel 2000, Excel 2002 및 Excel 2003으로 가져올 수 없습니다.

    다음은 Excel 2003 및 Excel 2007 용 행 제한입니다.
    • Excel 2003: 65536 행
    • Excel 2007: 1048576 행
    출력 파일이이 제한을 초과 하는 경우 Excel에서 로드 하기 전에 파일 여러 개로 분할 해야 합니다.
  • Send_As_Errors 파일은 특정 계정을 나열 합니다 읽기 또는 쓰기 권한을 오류가 발생 한 경우. 도메인에 있는 다른 계정이 올바르게 처리 된 경우 이러한 계정은 공통점이 있을 수 있습니다 공통 스크립트를 실행 하는 것을 금지 하는. 일반적인 문제는 다음과 같습니다.
    • 보거나 계정에 속성을 설정 하려면 관리 권한이 부족 합니다.
    • Exchange 사서함 저장소가 실행 되지 않습니다.
    • 워크스테이션이 동일한 도메인의 구성원이 아닙니다.
    • 사용 중인 관리 계정이 동일한 포리스트의 아닙니다.
이 스크립트를 실행 하려면 복사 및 끝 스크립트 시작 스크립트 사이의 모든 줄 메모장 같은 일반 텍스트 편집기에 붙여. AddSendAs.vbs로 저장 합니다. 스크립트를 시작 합니다.
Option Explicit
Dim OUTPUT_DELIMITER
OUTPUT_DELIMITER = """""""" & vbTab & """"""""

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

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

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

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

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

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

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

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

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

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

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

Dim objUser
Dim objSDMailBox
Dim objSDNTsecurity
Dim objDACLNTSD
Dim objNewACE

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

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

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

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

sDCServer = WScript.Arguments(ARG_INDEX_DC)

CreateOutputFiles

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

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

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

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

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

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

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

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

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

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

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

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

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

err.Clear
FindAllFMAUsers objSDMailBox

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

If TotalACE > 0 Then
Set objDACLNTSD = objSDNTsecurity.DiscretionaryAcl

For i = 0 to TotalACE - 1 Step 1

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

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

objDACLNTSD.AddAce objNewAce
End If

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

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

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

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

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

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

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

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

End If
rsUsers.MoveNext
Wend
End If

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

sImportFilePath = WScript.Arguments(ARG_INDEX_FILENAME)

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

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

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

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

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

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

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

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

objDACLNTSD.AddAce objNewACE
fNeedToAddSendAs = True
End If
Loop

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

End If

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

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

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

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

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

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

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

Set objACL = Nothing
End Function

Function CheckSendAsACE (objDiscretionaryACL, sTAlias)
Dim objACE
Dim intACECount

err.Clear
fACESendasFound = 0
intACECount = objDiscretionaryACL.AceCount

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

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

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

Function CreateOutputFiles
Dim sTimeArray
Dim sTimeShort
Dim sTime

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

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

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

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

End Function

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

WScript.Quit
End Function
최종 스크립트

Microsoft는 모든 보증, 그림에 대 한 묵시적인 보증. 이 포함 되지만 상품성 또는 특정 목적에의 적합성의 묵시적된 보증에 국한 되지는 않습니다. 이 문서는 작성 하 고 프로시저를 디버깅할 데 사용 되는 도구 및 여기서 설명 하는 프로그래밍 언어에 익숙한 가정 합니다. Microsoft 지원 엔지니어는 특정 프로시저의 기능을 설명할 수 있습니다. 그러나이 예제에서는 추가 기능을 제공 하거나 특정 요구 사항에 맞도록 프로시저를 구성 하려면 수정 하지 않습니다.

Microsoft에서 제공 하는 지원 옵션에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.이 문서에 나와있는 다른 공급업체 제품들은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 명시적이든 묵시적이든 이러한 제품의 성능 또는 안정성에 대한 어떠한 보증도 하지 않습니다.
속성

문서 ID: 912918 - 마지막 검토: 2017. 2. 7. - 수정: 1

Microsoft Exchange 2000 Server Standard Edition, Microsoft Exchange 2000 Enterprise Server, Microsoft Exchange Server 2003 Standard Edition, Microsoft Exchange Server 2003 Enterprise Edition

피드백