2014-07-04 14 views
5

La situazione:PowerShell sessione generico e importare questa sessione in sessione di gestione remota Cambio

Sto cercando di fare una domanda (C# -asp.net) per manipolare l'utente su un server Exchange. L'applicazione sarà su un server diverso da quello dello scambio. Quindi, per manipolare i dati, sto usando una "sessione di gestione remota di Exchange" creata con C#. La sessione di gestione remota di Exchange consente l'accesso a comandi di PowerShell semplici come "New-Mailbox" e "Set-User". Ciò è utile per attività semplici, ma nel mio caso, devo eseguire operazioni più complesse che richiedono un comando specifico che non incluso nel comando predefinito. Per accedere a questo comando, devo utilizzare alcuni moduli specifici come "ActiveDirectory". È semplice ? Utilizza solo "Import-Module"! Non proprio, come ho detto, la "sessione di gestione remota di Exchange" è molto limitata con il comando e "Import-Module" non è consentito ...

Quindi cosa possiamo fare?

Ho letto un sacco del mio problema, e la più "semplice" (che ho capito la teoria) la soluzione è qualcosa di simile:

Inizia con una sessione PS generica, importare il modulo AD, quindi collegare a una sessione di gestione di Exchange ed eseguire un'Import-PSSession e utilizzare la comunicazione remota implicita per gli elementi di gestione di Exchange.

Dato che sono abbastanza nuovo per manipolare Powershell con C#, non ho idea di come utilizzare questa fantastica soluzione nel mio codice. Quindi ti sto chiedendo il tuo aiuto.

Ecco il mio codice corrente:

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

Questo codice grande lavoro per semplice compito (come "New-Mailbox")! Ma come posso creare una "sessione PS generica" ​​e quindi utilizzare questa sessione nella "sessione di gestione remota di Exchange"?

risposta

2

Per quanto un Capisco il tuo problema è:

Devi fare le operazioni più complesse che avrà bisogno di qualche comando specifico che non è incluso nel comando di default. Per accedere a questo comando, è necessario utilizzare alcuni moduli specifici come "Active Directory".

Ecco tre modi per eseguire query su Active Directory utilizzando C# senza il modulo PowerShell).

primo, utilizzando ADSI (old fashion)

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

Secondo, inizio .NET 3.5 Microsoft introduce Principal e AccountManagement.

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

Terzo, è possibile utilizzare a basso livello (LDAP nativo) protocollo

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

0

Tu non sei del tutto corretto.Dal momento che ti stai connettendo a una sessione PowerShell REMOTE non è necessario eseguire un modulo di importazione.

Quando si crea una sessione, IIS e PowerShell caricheranno automaticamente i moduli richiesti per l'accesso associato alle proprie credenziali. Questo è simile a quando si carica Exchange PowerShell e si vede la barra verde sopra i moduli di caricamento della pagina.

spero che sia d'aiuto.

Problemi correlati