2014-07-04 11 views
5

durum bu oturumu içe: Ben bir uygulama yapmaya çalışıyorumPowershell jenerik seans ve Exchange uzaktan yönetim oturumu

(C# -asp.net) bir değişim sunucusunda kullanıcının manipüle etmek. Uygulama, değişiminkinden farklı bir sunucuda olacak. Yani, verileri işlemek için C# ile oluşturulan bir "Exchange uzaktan yönetim oturumu" kullanıyorum. Exchange uzaktan yönetim oturumu, "Yeni-Posta Kutusu" ve "Set-Kullanıcı" gibi basit powershell komutlarına erişim sağlar - Bu basit bir görev için iyidir, fakat benim durumumda, bazı özel komutlara ihtiyaç duyan daha karmaşık işlemler yapmak zorundayım. varsayılan komutta bulunmaz. Bu komuta erişmek için "ActiveDirectory" gibi belirli bir modül kullanmalıyım. Basit ? Sadece "İthalat Modülü" kullanın! Gerçekten değil, dediğim gibi, "Exchange uzaktan yönetim oturumu" komutuyla çok sınırlıdır ve "Import-Module" e izin verilmez ...

Peki ne yapabiliriz?

benim sorun hakkında çok okumak ve (ı teorisini anlamak That) çözümü gibi bir şey en "basit": AD modülü almak, genel PS oturumu ile

Başlat, ardından bağlanmak Bir Exchange yönetim oturumu için bir Import-PSSession yapın ve Exchange yönetim öğeleri için örtülü bir remoting kullanın.

C# ile Powershell'i işlemek için oldukça yeni olduğum düşünüldüğünde, bu harika çözümü kodumda nasıl kullanacağımı bilmiyorum. Ben de yardımını istiyorum.

İşte benim geçerli kod var: ("Yeni-Posta Kutusu" gibi) basit bir görev için büyük

// Prepare the credentials. 
string runasUsername = @"MarioKart 8"; 
string runasPassword = "MarioKart"; 
SecureString ssRunasPassword = new SecureString(); 
foreach (char x in runasPassword) 
    ssRunasPassword.AppendChar(x); 
PSCredential credentials = 
new PSCredential(runasUsername, ssRunasPassword); 

// Prepare the connection 
var connInfo = new WSManConnectionInfo(
    new Uri("MarioKart8Server"), 
    "http://schemas.microsoft.com/powershell/Microsoft.Exchange", 
    credentials); 
connInfo.AuthenticationMechanism = 
    AuthenticationMechanism.Basic; 
connInfo.SkipCACheck = true; 

connInfo.SkipCNCheck = true; 

// Create the runspace where the command will be executed 
var runspace = RunspaceFactory.CreateRunspace(connInfo); 

// create the PowerShell command 
var command = new Command("New-Mailbox"); 
.... 

// Add the command to the runspace's pipeline 
runspace.Open(); 
var pipeline = runspace.CreatePipeline(); 
pipeline.Commands.Add(command); 

// Execute the command 
var results = pipeline.Invoke(); 

if (results.Count > 0) 
     System.Diagnostics.Debug.WriteLine("SUCCESS"); 
else 
     System.Diagnostics.Debug.WriteLine("FAIL"); 

Bu kod çalışma! Ancak "genel PS oturumu" nu nasıl oluşturabilirim ve sonra bu oturumu "Exchange uzaktan yönetim oturumunda" kullanabilir miyim?

cevap

2

Bildiğim kadarıyla Sorununuzu anlıyorum bir geçerli: Varsayılan komuta dahil değildir bazı özel komut gerekir daha karmaşık işlemleri yapmak zorunda

. Bu komuta erişmek için "Active Directory" gibi belirli bir modül kullanmalısınız.

PowerShell modülü olmadan C# kullanarak Active Directory'yi sorgulamanın üç yolu vardır). ADSI (eski moda)

How to do Almost everything (with ADSI) on Active Directory with C# kullanarak İlk

.

.NET'in başlangıcı ve AccountManagement.

How to do Almost everything (with AccountManagement) on Active Directory with C#.

Üçüncü, düşük seviyede (yerel LDAP) protokolünü Sen tam olarak doğru değil

System.DirectoryServices.Protocols (S.DS.P).

0

kullanabilirsiniz.Bir REMOTE powershell oturumuna bağlandığınızdan, bir import-module yapmanıza gerek yoktur.

Bir oturum oluşturduğunuzda, IIS ve Powershell sizin kimlik bilgilerinizle ilişkili erişime göre sizin için gerekli olan modülleri OTOMATİK olarak yükleyecektir. Bu, Exchange Powershell'i yüklediğinizde ve sayfa yükleme modüllerinin üstünde yeşil çubuğu gördüğünüzde benzer.

umarım yardımcı olur.