如何以编程方式知道传递给cmdlet的所有参数?

时间:2012-05-16 19:44:16

标签: c# powershell powershell-v2.0 cmdlets cmdlet

我在.net中实现了客户cmdlet。我想知道用户传递给它的所有参数。

My-Cmdlet -foo -bar -foobar

基本上我想知道用户以编程方式使用参数foo,bar,foobar执行了这个cmdlet。

在脚本中看起来我们可以使用:$ PSBoundParameters.ContainsKey('WhatIf')

我需要.net(c#)

中的那个

3 个答案:

答案 0 :(得分:5)

据我所知:$ PSBoundParameters只是$ MyInvocation.BoundParameters的快捷方式: $ MyInvocation.BoundParameters.Equals($ PSBoundParameters) 真

如果要在 编写的cmdlet中获取相同的信息,可以这样做......:

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());
        }
    }
}

代码很快,但你应该得到图片。免责声明:我不是开发人员,所以我可能做错了。 ;)

HTH 鲍尔泰克

答案 1 :(得分:0)

除非您在cmdlet周围创建代理命令(使用函数包装命令)并将自定义代码添加到其中,否则您无法访问代码。另一个想法是检查控制台历史记录中的最后执行的命令或类似的方法。

答案 2 :(得分:0)

对于whatifpreference,这个.GetVariable总是返回false。

我通过使用myinvocation.buildparameters字典解决了这个问题。

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

此致 梦想家