2011-09-23 2 views
0

Powershell을 사용하여 Ecxhange 2007에서 Windows 시스템 서비스를 사용하여 사서함을 만듭니다. 시스템 서비스로 실행 중일 때 (advapi32.dll을 사용하여) 가장을 사용하여 powershell 호출을 래핑하면 해당 교환 권한을 가진 사용자로 실행되지만 다음 오류 메시지가 표시됩니다.C#의 Powershell 및 Exchange 2007에서 가장을 사용할 때의 오류

다음 오류로 인해 Windows PowerShell 스냅인 Microsoft.Exchange.Management.PowerShell.Admin을로드 할 수 없습니다. 'Microsoft.Exchange.Data.Directory.Globals'의 형식 이니셜 라이저에서 예외가 발생했습니다.

이 문제를 설명하는 Microsoft KB 문서 (KB943937)가 있으며 Exchange SP1 RU1을 설치하는 것이 수정이지만 현재 SP3 RU1을 (를) 실행하고 있습니다. KB 기사에 지정된대로 -DomainController 매개 변수를 사용하고 있지만 여전히 동일한 오류가 발생합니다.

코드를 잘 못 사용하는 사용자로 서비스를 실행하면 코드에 문제가 있다고 생각하지 않습니다. 나는 Windows XP와 Server 2008에서 같은 문제로 이것을 실행 해 보았습니다.

powershell 코드 전에 System.Security.Principal.WindowsIdentity.GetCurrent().Name을 호출하면 가장이 올바르게 작동하는지 알 수 있습니다.

이전에이 문제가 발생 했습니까?

+0

이 대답을 읽으십시오. http://stackoverflow.com/questions/11806/how-do-you-impersonate-an-active-directory-user-in-powershell –

+0

@Smallpygmy 좋은 생각을했습니다. 편집본을 답변으로 올리고 답변으로 표시 한 경우 좋을 것입니다. :-) – Matt

답변

1

향후이 문제를 겪는 사람에게 문제는 가장이 시작된 부분입니다.

스냅인을 추가 한 후 실행 영역을 만들기 전에 가장을 시작해야합니다.

RunspaceConfiguration rsconfig = RunspaceConfiguration.Create(); 
PSSnapInException snapInException = null; 
PSSnapInInfo info = rsconfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException); 
BeginImpersonation(); 
myRunspace = RunspaceFactory.CreateRunspace(rsconfig); 

전체 소스 코드는 this을 참조하십시오.

+0

'BeginImpersonation()'메서드를 사용할 수 있도록 어디서 dll을 가져올 수 있습니까? – BRogers

관련 문제