2014-07-04 20 views
5

Tình hình:Powershell phiên generic và nhập khẩu phiên này trong Exchange phiên quản lý từ xa

Tôi cố gắng để làm cho một ứng dụng (C# -asp.net) để thao tác sử dụng trên một máy chủ trao đổi. Ứng dụng sẽ ở trên một máy chủ khác với máy chủ của Exchange. Vì vậy, để thao tác dữ liệu, tôi đang sử dụng "Phiên quản lý từ xa Exchange" được tạo bằng C#. Phiên quản lý từ xa trao đổi cho phép truy cập vào lệnh powershell đơn giản như "New-Mailbox" và "Set-User" - Điều này rất tốt cho nhiệm vụ đơn giản, nhưng trong trường hợp của tôi, tôi phải thực hiện nhiều thao tác phức tạp hơn. không được bao gồm trong lệnh mặc định. Để truy cập vào lệnh này, tôi phải sử dụng một số mô-đun cụ thể như "ActiveDirectory". Nó đơn giản ? Chỉ sử dụng "Import-Module"! Không thực sự, như tôi đã nói, "Phiên quản lý từ xa Exchange" rất hạn chế với lệnh và "Import-Module" không được phép ...

Vì vậy, chúng tôi có thể làm gì?

Tôi đọc rất nhiều về vấn đề của tôi, và hầu hết các "đơn giản" (Đó là tôi hiểu được lý thuyết) Giải pháp là một cái gì đó như:

Bắt đầu với một phiên PS chung, nhập khẩu các mô-đun AD, sau đó kết nối đến phiên quản lý Exchange và thực hiện Nhập-PSSession và sử dụng tính năng từ xa ngầm cho các công cụ quản lý Exchange.

Cho rằng tôi khá mới để thao tác Powershell với C#, tôi không biết cách sử dụng giải pháp tuyệt vời này trong mã của mình. Vì vậy, tôi yêu cầu sự giúp đỡ của bạn.

Đây là mã hiện tại của tôi:

// 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"); 

này công việc mã tuyệt vời cho nhiệm vụ đơn giản (như "New-Mailbox")! Nhưng làm cách nào tôi có thể tạo "phiên PS chung" và sau đó sử dụng phiên này trong "Phiên quản lý từ xa Exchange"?

Trả lời

2

Theo một Tôi hiểu vấn đề của bạn là:

Bạn phải làm thao tác phức tạp hơn mà sẽ cần một số lệnh cụ thể mà không được bao gồm trong các lệnh mặc định. Để truy cập vào lệnh này, bạn phải sử dụng một số mô-đun cụ thể như "Active Directory".

Dưới đây là ba cách để truy vấn Active Directory bằng C# không có mô-đun PowerShell).

Đầu tiên, sử dụng ADSI (cũ thời trang)

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

Thứ hai, bắt đầu .NET 3.5 Microsoft giới thiệu PrincipalAccountManagement.

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

Thứ ba, bạn có thể sử dụng ở mức độ thấp (LDAP mẹ đẻ) giao thức

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

0

Bạn không phải là hoàn toàn chính xác.Vì bạn đang kết nối với một phiên làm việc của PowerShote, bạn không cần phải làm một mô-đun nhập khẩu.

Khi bạn tạo phiên, IIS và Powershell sẽ TỰ ĐỘNG tải các mô-đun cần thiết cho bạn theo quyền truy cập được liên kết với thông tin đăng nhập của bạn. Điều này tương tự như khi bạn tải Exchange Powershell và xem thanh màu xanh lá cây trên đầu trang của các mô-đun tải trang.

hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan