1

.netに顧客コマンドレットを実装しています。ユーザーが渡したすべてのパラメーターを知りたいのですが。

My-Cmdlet -foo -bar -foobar

基本的に、ユーザーがこのコマンドレットをパラメーターfoo、bar、foobarを使用してプログラムで実行したことを知りたいです。

スクリプトでは、次を使用して実行できるように見えます:$ PSBoundParameters.ContainsKey('WhatIf')

.net(c#)でそれと同等のものが必要です

4

3 に答える 3

6

私が覚えている限り、$PSBoundParametersは$MyInvocation.BoundParametersの単なるショートカットです:$ MyInvocation.BoundParameters.Equals($ PSBoundParameters)True

作成したコマンドレットで同じ情報を取得したい場合、次のように取得できます...:

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 Bartek

于 2012-05-16T20:31:19.217 に答える
0

コマンドレットの周りにプロキシコマンドを作成し(コマンドを関数でラップする)、カスタムコードを追加しない限り、コードにアクセスできなければ、頭から離れることはできません。もう1つのアイデアは、コンソール履歴または同様の方法で最後に実行されたコマンドを確認することです。

于 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 に答える