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"?