3

powershell を介して交換に接続するために使用する C# の次のコードがあります。

次のコードは問題なく動作しますが、exchange コマンドレットを使用するために必要なコマンドがもう 1 つあります。

ここに私が今持っているコードがあります。

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ただし、その出力を変数 $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.);
4

2 に答える 2

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 
}
于 2012-10-07T02:25:33.463 に答える
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();

ここで、result[0] は作成された最初のリモート セッションの結果です。それが役立つかどうか教えてください。

于 2012-07-31T13:26:24.593 に答える