.netに顧客コマンドレットを実装しています。ユーザーが渡したすべてのパラメーターを知りたいのですが。
My-Cmdlet -foo -bar -foobar
基本的に、ユーザーがこのコマンドレットをパラメーターfoo、bar、foobarを使用してプログラムで実行したことを知りたいです。
スクリプトでは、次を使用して実行できるように見えます:$ PSBoundParameters.ContainsKey('WhatIf')
.net(c#)でそれと同等のものが必要です
.netに顧客コマンドレットを実装しています。ユーザーが渡したすべてのパラメーターを知りたいのですが。
My-Cmdlet -foo -bar -foobar
基本的に、ユーザーがこのコマンドレットをパラメーターfoo、bar、foobarを使用してプログラムで実行したことを知りたいです。
スクリプトでは、次を使用して実行できるように見えます:$ PSBoundParameters.ContainsKey('WhatIf')
.net(c#)でそれと同等のものが必要です
私が覚えている限り、$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
コマンドレットの周りにプロキシコマンドを作成し(コマンドを関数でラップする)、カスタムコードを追加しない限り、コードにアクセスできなければ、頭から離れることはできません。もう1つのアイデアは、コンソール履歴または同様の方法で最後に実行されたコマンドを確認することです。
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();
}
}
よろしく、ドリーマー