2

この PowerShell コマンドを使用して、Exchange Online のディストリビューション グループにメンバーを追加します。これは PS で正しく動作します。しかし、C# アプリからこれを行う必要があります。

$arr | foreach-object{Add-DistributionGroupMember -Identity 'Test' -Member $_}

メンバーを含む配列を PS の $arr に渡し、それを foreach オブジェクトにパイプする必要があります。私は多くの検索を行いましたが、すべての例は単一のコマンドを実行する方法のみを示しています. C# で PS コマンドを実行するにはどうすればよいですか?

コードスニペット:

using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
        {
            runspace.Open();

            using (PowerShell ps = PowerShell.Create())
            {
                ps.Runspace = runspace;

                string[] members = new string[] { "testuser1@somecompany.com", 
                                                  "testuser2@somecompany.com",                         
                };

                ps.Commands.AddParameter("Members").AddArgument(members); // ??
                ps.Commands.AddCommand("foreach-object"); // I'm stuck at this point

                Collection<PSObject> results = ps.Invoke();
            }
        }

注: PS でリモート スクリプトがブロックされているため、AddScriptを介してこれを行うことはできません。また、実行空間は最初のパイプラインのみを実行するため、以下のようなことをしても機能しません。

foreach(string mem in members)
{
 Command command = new Command("Add-DistributionGroupMember");
 command.Parameters.Add("Identity", "test");
 command.Parameters.Add("Member", member);
 Pipeline pipeline = runspace.CreatePipeline();
 pipeline.Commands.Add(command);
 pipeline.Invoke();
}
4

2 に答える 2

1

はい、ドキュメントが不足しています。以下をまとめました。明らかに最高ではありませんが、動作しているように見えましたget-process( で試すことはできませんAdd-DistributionGroupMember)。あなたはおそらくそれを改善することができます:

            using (PowerShell ps = PowerShell.Create())
            {
                ps.Runspace = runspace;
                var members = new[]
                                  {
                                      "testuser1@somecompany.com",
                                      "testuser2@somecompany.com",
                                  };
                var command1 = new Command("write-output");
                command1.Parameters.Add("InputObject", members);
                ps.Commands.AddCommand(command1);

                foreach (PSObject output in ps.Invoke())
                {
                    ps.Commands.Clear();
                    var command2 = new Command("Add-DistributionGroupMember");
                    ps.Commands.AddCommand(command2);
                    ps.Commands.AddParameter("Name", output);
                    ps.Commands.AddParameter("Identity", "test");
                    foreach (PSObject output2 in ps.Invoke())
                    {
                        Console.WriteLine(output2);
                    }
                }
            }
于 2011-10-13T06:25:31.173 に答える