5

目標は、Exchange 2010 サイトの最小のデータベースを取得することなので、C# から次の powershell コマンドを実行しようとしています。

Get-MailboxDatabase -server Exchange2010 -Status | select-object Name,DatabaseSize

私が苦労している問題は、Select句コマンドをパイプする方法です。

これは私の試みです、

WSManConnectionInfo wsConnectionInfo = new WSManConnectionInfo(new Uri("https://" + ExchangeSite + "/powershell?serializationLevel=Full"),
    "http://schemas.microsoft.com/powershell/Microsoft.Exchange", getCredential());
wsConnectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
wsConnectionInfo.SkipCACheck = true;
wsConnectionInfo.SkipCNCheck = true;

rsRemoteRunspace = RunspaceFactory.CreateRunspace(wsConnectionInfo);
rsRemoteRunspace.Open();
Pipeline pipeLine = rsRemoteRunspace.CreatePipeline();

Collection<PSObject> DatabaSize = null;

Command myCommand = new Command("Get-MailboxDatabase");
myCommand.Parameters.Add("Server", "Exchange2010");
myCommand.Parameters.Add("Status", null);
Command myCommand2 = new Command("Select-Object");
    myCommand.Parameters.Add("Name");
myCommand.Parameters.Add("DatabaseSize");
pipeLineMB.Commands.Add(myCommand);
pipeLineMB.Commands.Add(myCommand2);
DatabaSize = pipeLine.Invoke();

しかし、私は得ています、

"A parameter cannot be found that matches parameter name 'Name'."

Exchange サーバーでコマンドレットを実行するクライアント マシンでコードを実行する必要があるため、SnapIn を使用できないことに注意してください。

どんなアドバイスでも大歓迎です。

編集

yamen によって提案された修正を適用し、コマンドを呼び出すことができましたが、値を取得しようとすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。

例外

Servername と Name の値を取得できますが、DatabaseSize で失敗することに注意してください。このフラグはこの値を有効にするフラグであるため、'Status' フラグが適切に設定されていないと推測されます。

4

2 に答える 2

4

Here did you mean this:

Command myCommand2 = new Command("Select-Object");
myCommand2.Parameters.Add("DatabaseSize");

Instead of this:

Command myCommand2 = new Command("Select-Object");
myCommand.Parameters.Add("DatabaseSize");

Notice myCommand2 on the second line?

Regardless, you might find that the parameter you're actually after is Property viz:

myCommand2.Parameters.Add("Property", "DatabaseSize");

And for more than one:

var props = new string[] { "DatabaseSize", "ServerName", "Name" };
myCommand2.Parameters.Add("Property", props);
于 2012-05-01T03:37:37.193 に答える
2

同様のシナリオを作成するために、これを試しました

dir | select Name

うまくいきません。「名前」が有効なパラメーターではないという同じエラーが表示されます。次に、以下を試しましたが、動作します

dir | select -first 3

に変換します

        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();
        Pipeline pipeline = runspace.CreatePipeline();
        Command dir = new Command("dir");
        pipeline.Commands.Add(dir);
        Command select = new Command("select");
        select.Parameters.Add("first", 3);
        pipeline.Commands.Add(select);

値であるパラメーターの名前を見つける必要があるDatabaseSizeと思います。

于 2012-05-01T03:19:05.157 に答える