2012-05-12 3 views
3

У меня есть следующий код на C#, который я использую для подключения к обмену через powershell.Powershell and exchange in C#

Следующий код работает нормально, однако есть еще одна команда, которая мне нужна для использования командлетов Exchange.

Вот код, который у меня есть.

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

PSCommand command = new PSCommand(); 
command.AddCommand("New-PSSession"); 
command.AddParameter("ConfigurationName", "Microsoft.Exchange"); 
command.AddParameter("ConnectionUri", new Uri("https://ps.outlook.com/powershell/")); 
command.AddParameter("Credential", creds); 
command.AddParameter("Authentication", "Basic"); 
command.AddParameter("AllowRedirection"); 

powershell.Commands = command; 

try 
{ 
    runspace.Open(); 
    powershell.Runspace = runspace; 

    Collection<PSObject> commandResults = powershell.Invoke(); 

    StringBuilder sb = new StringBuilder(); 

    foreach (PSObject ps in commandResults) 
    { 
     sb.AppendLine(ps.ToString()); 
    } 

    sb.AppendLine(); 

    lbl.Text += sb.ToString(); 
} 
finally 
{ 
    // dispose the runspace and enable garbage collection 
    runspace.Dispose(); 
    runspace = null; 
    // Finally dispose the powershell and set all variables to null to free 
    // up any resources. 
    powershell.Dispose(); 
    powershell = null; 
} 

Моя проблема заключается в том, что мне еще нужно выполнить команду import-pssession $session где $session является выход из моей первой команды. Однако я не знаю, как я могу заявить, что выход в качестве переменной $ сессии или что-то вроде:

PSCommand command = new PSCommand(); 
command.AddCommand("Import-PSSession"); 
command.AddParameter("Session", #Not sure how to put session info which is what the first command produces into here.); 
+0

Вы когда-нибудь решали это? – Kjensen

ответ

1

попробовать раздел «Удаленный запрос с использованием локального пространства запуска (скриптовый удаленный класс)» в следующем блоге Technet http://blogs.technet.com/b/exchange/archive/2009/11/02/3408653.aspx

Я считаю, что вы пытаетесь достичь, это:

// Set the runspace as a local variable on the runspace 
    powershell = PowerShell.Create(); 
    command = new PSCommand(); 
    command.AddCommand("Set-Variable"); 
    command.AddParameter("Name", "ra"); 
    command.AddParameter("Value", result[0]); 
    powershell.Commands = command; 
    powershell.Runspace = runspace; 
    powershell.Invoke(); 

Где результат [0] является результатом первого сеанса удаленного создания. Дайте мне знать, если это поможет.

+0

Затем вы можете импортировать сессию, с тем чтобы использовать его: Использование powershell__2 Как PowerShell = PowerShell.Create() command.AddScript ("Import-PSSession -Session $ ра") powershell__2.Commands = команда powershell__2.Runspace = пробел powershell__2.Invoke() End Использование –

3

Вместо этого вы можете попробовать создать удаленное рабочее пространство, ниже приведен пример. Вы можете обратиться к следующей статье http://msdn.microsoft.com/en-us/library/windows/desktop/ee706560(v=vs.85).aspx.

string schemaURI = "http://schemas.microsoft.com/powershell/Microsoft.Exchange"; 
Uri connectTo = new Uri("https://ps.outlook.com/powershell/"); 
PSCredential credential = new PSCredential(user,secureStringPassword); // the password must be of type SecureString 
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(connectTo,schemaURI, credential); 
connectionInfo.MaximumConnectionRedirectionCount = 5; 
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic; 

try 
{ 
    Runspace remoteRunspace = RunspaceFactory.CreateRunspace(connectionInfo); 
    remoteRunspace.Open(); 
} 
catch(Exception e) 
{ 
    //Handle error 
}