2012-05-16 3 views
1

У меня есть командлет клиента, реализованный в .net. Я хотел бы узнать все параметры, которые пользователь передал.Как узнать все параметры, переданные командлету программно?

My-Cmdlet -foo -bar -foobar 

В основном я хотел бы знать, что пользователь выполнял эту команду с параметром Foo, Bar, Foobar программно.

Похоже, в сценарии, мы можем сделать это с помощью: $ PSBoundParameters.ContainsKey ('WhatIf')

мне нужно equalent о том, что в .net (C#)

ответ

0

Off верхней части моей головы, ты не может не иметь доступа к коду, если вы не создадите прокси-команду вокруг командлета (оберните команду с помощью функции) и добавьте к ней свой код. Другая идея - проверить последнюю выполненную команду в истории консоли или аналогичный метод.

5

Насколько я помню: $ PSBoundParameters просто ярлык для $ MyInvocation.BoundParameters: $ MyInvocation.BoundParameters.Equals ($ PSBoundParameters) Правда

Если вы хотите, чтобы получить ту же информацию в командлете вы писал, вы можете получить его, как ...:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Management.Automation; 

namespace Test 
{ 
    [Cmdlet(VerbsCommon.Get, "WhatIf", SupportsShouldProcess = true)] 
    public class GetWhatIf : PSCmdlet 
    { 

     // Methods 
     protected override void BeginProcessing() 
     { 
      this.WriteObject(this.MyInvocation.BoundParameters.ContainsKey("WhatIf").ToString()); 
     } 
    } 
} 

код quick'n'dirty, но вы должны получить картину. Отказ от ответственности: я не разработчик, поэтому я, вероятно, ошибаюсь. ;)

НТН Bartek

+0

Нужно также рассмотреть вопрос о [ 'InvocationInfo.UnboundParameters'] (http://msdn.microsoft.com/en-us/library/windows/desktop/system.management. automation.invocationinfo.unboundarguments% 28v = vs.85% 29.aspx) для любого, не связанного с параметром (например, когда есть параметр имеет значение ValueFromRemainingArguments, true). – Richard

0

Некоторые, как this.GetVariable для WhatIfPreference всегда возвращается ложь.

Я работал над этим, используя словарь myinvocation.buildparameters.

public bool WhatIf 
{ 
    get 
    {         
     //if (this.GetVaribaleValue<bool>("WhatIfPreference", out whatif)) 
     return this.MyInvocation.BoundParameters.ContainsKey("WhatIf") 
      && ((SwitchParameter)MyInvocation.BoundParameters["WhatIf"]).ToBool(); 
    } 
} 

С уважением, Dreamer