2011-03-14 1 views
2

매우 간단한 몇 가지 powershell 명령이 있습니다.C# 내에서 Powershell 명령을 실행하는 Exchange 사서함을 사용하거나 사용하지 못하도록 설정할 수 없습니다.

disable-mailbox dadelgad -confirm:$false 
enable-mailbox -identity 'dadelgad' -database 'NET5014DB10' -Alias 'dadelgad' 

첫 번째 명령은 Exchange 사서함을 사용하지 않도록 설정하고 두 번째 명령은 사서함을 사용하도록 설정하는 것입니다. Exchange에 대한 전체 관리자 권한을 가지고 있지만 도메인 관리자가 아닌 조직 관리 그룹에있는 사용자로 로그인했습니다. PowerShell에서 직접 이러한 명령을 실행하면 제대로 작동하지만 C#에서 호출 할 때는 작동하지 않습니다.

나는 C# 코드에서 이러한 명령을 호출하는 몇 가지 버튼이있는 매우 간단한 windows forms 응용 프로그램을 만들었습니다. 전체 Exchange 권한이있는 사용자로 앱을 실행하면 대부분의 명령이 get-mailbox -identity 'dadelgad'와 같은 문제없이 작동합니다. Exchange에서 플래그를 설정할 수 있으며 별칭 전자 메일을 추가하고 대부분의 기능을 수행 할 수 있지만 계정을 해제하거나 사용할 수는 없습니다.

이 기능을 수행하려면 도메인 관리자 여야합니까? 그것은 거의 권한 문제처럼 보이지만 사용자는 Exchange에 대한 완전한 권한을 가지며 Powershell에서 직접이 두 명령을 모두 수행 할 수 있습니다.

도움이 필요하십니까?

+0

어떻게 작동하지 않는 것을 알고 계십니까? – Gabe

+0

나는 Exchange에 대한 권한이 있으며 MMC에 가서 확인하고 명령이 작동하지 않습니다. 예를 들어, 활성화 된 사서함에서 disable 명령을 실행하면 여전히 사용 가능으로 표시되고 그 반대의 경우도 마찬가지입니다. –

+0

오류 또는 예외가 없으면 자동으로 실패합니다. – Gabe

답변

1

나는이 문제를 일으키는 원인이 무엇인지 결국 알았습니다. 그래서 당신이 같은 문제를 겪을 경우에 대비하여 정보를 전달할 것입니다. serverfault.com에서 해결책을 찾았습니다. this url. UAC (User Access Control)가 프로그램에 로그인하여 로그인 한 사용자가 차단되었습니다. 그것을 끄면 문제가 해결되었습니다. 글쎄, 이처럼 크게 펼쳐서는 안되지만 문제가 무엇인지 말해 줬기 때문에 실제로 해결되지 않았습니다. 이제 돌아가서 프로그램 실행을 허용 할 수있는 권한을 조정할 수 있는지 확인해야하지만 보호 기능도 제공해야합니다.

1

아래의 코드를 사용하여 사서함을 만들었으며 사서함을 사용하도록 변경했으며이를 사용하지 않도록 설정해야합니다. 암호를 하드 코딩하는 것보다 계정에 암호를 설정하는 더 좋은 방법을 찾으십시오.

SecureString password = new SecureString(); 
string username = "youruseraccount"; 
string str_password = "thepassword"; 
string exchangeserver = "yourexchangeserver"; 
string liveIdconnectionUri = "http://" + exchangeserver +"/Powershell?serializationLevel=Full"; 
foreach (char x in str_password) { 
    password.AppendChar(x); 
} 

PSCredential credential = new PSCredential(username, password); 
WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(liveIdconnectionUri)), "http://schemas.microsoft.com/powershell/Microsoft.Exchange",credential); 
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default; 

Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo); 
PowerShell powershell = PowerShell.Create(); 
runspace.Open(); 
powershell.Runspace = runspace; 

PSCommand command1 = new PSCommand(); 
command1.AddCommand("Enable-Mailbox"); 
command1.AddParameter("Identity", "dadelgad"); 
command1.AddParameter("Database", "NET5014DB10"); 
//Add as many parameters as you need 

powershell.Commands = command1; 
powershell.Invoke(); 

는 추가 명령이 새로운 PSCommand을 만들 실행 후 PowerShell을 예를 이전 호출을 같은 방법으로하지만 를 추가하고 다시 PowerShell을 호출합니다.

그레그

관련 문제