2017-05-23 2 views
1

C#フォームアプリケーション内からPowerShellを実行します。 PowerShellコマンドに複数のパラメータを追加したい。Powershell multiple AddParameter C#

しかし、私は二AddParameterコールを入力すると、それはエラーで失敗しました:

System.Management.Automation.ParameterBindingException

コード:

PowerShell shell = PowerShell.Create().AddCommand("Get-NetAdapter"); 
shell.AddParameter("name", "Ethernet*"); 
shell.AddParameter("InterfaceIndex", "5"); 

foreach (PSObject result in shell.Invoke()) 
{ 
    Console.WriteLine("{0,-24}{1}", result.Members["Name"].Value, 
            result.Members["InterfaceDescription"].Value); 
} // End foreach. 

をそれだけで1つのパラメータを受け入れるように見えます。

AddParametersもありますが、これを行うことはできません。

誰でもこの経験がありますか?

答えて

0

コマンドレットでは、実際にはnameとを同時に使用することはできません。これは、それらが異なるパラメータセットに属し、結果として別々に使用されなければならないためです。

そのコマンドレットのパラメータセットの詳細を表示するには、こちらを参照してください。https://technet.microsoft.com/en-us/library/jj130867(v=wps.630).aspx

またはPowerShellでGet-Help Get-NetAdapterを使用しています。

しかし、同じパラメータセットで許可されているパラメータを使用しているときにパラメータを追加する際に問題が残っている場合は、このように両方のパラメータを1つのコマンドとして追加できます(namethrottlelimitを例として使用します)。 Get-NetAdapterByName):同じパラメータセットで許可

PowerShell shell = PowerShell.Create().AddCommand("Get-NetAdapter") 
             .AddParameter("name", "Ethernet*") 
             .AddParameter("ThrottleLimit", 5); 

または代わりにあなたは、パラメータ名と値の辞書を使用することができます。

IDictionary parameters = new Dictionary<String, String>(); 
parameters.Add("name", "Ethernet*"); 
parameters.Add("ThrottleLimit", 5); 

PowerShell shell = PowerShell.Create().AddCommand("Get-NetAdapter") 
    .AddParameters(parameters) 

出典:https://msdn.microsoft.com/en-us/library/dn614674(v=vs.85).aspx

+0

速い返信のためのthx! 私はそれを試して、両方が同じエラーメッセージで終わる。 例外メッセージは {"指定された名前付きパラメータを使用してパラメータセットを解決できません"} – Bauke

+0

ああ、それはPowerShellのエラーです。 「name」と「InterfaceIndex」の両方を異なるパラメータセットに属するので一緒に使用することはできないことを伝えています。パラメータセットはhttps://technet.microsoft.com/en-us/library/jj130867(v=wps.630).aspx、または 'get-help get-netadapter'を介してPowerShellで確認できます。コマンドレットは、インデックスと名前の両方でネットワークアダプタを同時に取得するように設計されておらず、どちらか一方である必要があります。 –

+1

あなたは本当に正しいです!時間と労力のためにthx! – Bauke