1

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

My-Cmdlet -foo -bar -foobar

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

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

我需要.net(c#)中的等价物

4

3 回答 3

6

据我记得: $PSBoundParameters 只是 $MyInvocation.BoundParameters 的快捷方式: $MyInvocation.BoundParameters.Equals($PSBoundParameters) True

如果您想在编写的 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());
        }
    }
}

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

HTH 巴特克

于 2012-05-16T20:31:19.217 回答
0

在我的脑海中,你不能没有访问代码,除非你围绕 cmdlet 创建一个代理命令(用函数包装命令)并将你的自定义代码添加到它。另一个想法是检查控制台历史记录中最后执行的命令或类似方法。

于 2012-05-16T19:51:16.710 回答
0

一些whatifpreference的this.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(); 
    }
}

问候,梦想家

于 2012-05-17T01:30:19.473 回答