1

试图阻止 WriteDebug 中的(显然是默认的)查询模式,这不起作用(参见前面的帖子)。由于我还不知道如何检测是否在命令行上设置了 -DEBUG 我正在尝试这个:

(<Cmdlet(VerbsDiagnostic.Test, "MyCmdlet", SupportsShouldProcess:=False)> _

Protected Overrides Sub BeginProcessing()          
  setting = SessionState.PSVariable                                    
  dbPref = setting.Get("DebugPreference").Value
  vbPref = setting.Get("VerbosePreference").Value
  WriteObject("VBpref: " & vbPref.ToString)
  WriteObject("DBpref: " & dbPref.ToString)
  setting.Set("VerbosePreference", ActionPreference.Continue)
  setting.Set("DebugPreference", ActionPreference.Continue)
  dbPref = setting.Get("DebugPreference").Value
  vbPref = setting.Get("VerbosePreference").Value
  WriteObject("VBpref: " & vbPref.ToString)
  WriteObject("DBpref: " & dbPref.ToString)
  WriteDebug("TEST")

输出如下:

PS> Test-MyCmdlet -d
VBpref: SilentlyContinue
DBpref: SilentlyContinue
VBpref: Continue
DBpref: Continue
DEBUG: TEST

Confirm
Continue with this operation?
[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help
(default is "Y"):

这是没有 -D 开关的输出(没有查询):

PS> Test-MyCmdlet
VBpref: SilentlyContinue
DBpref: SilentlyContinue
VBpref: Continue
DBpref: Continue
DEBUG: TEST

那么,如果上面的重置有效,为什么我仍然处于查询模式?我怎样才能改变它?

4

2 回答 2

1
public PSVariableIntrinsics PSVariable { get; }

资料来源:MSDN

我不是开发人员,但我想这意味着您对您所做的任何更改settings都不会应用于用户会话,而只会应用于您存储在变量中的本地副本。

至于检测调试设置,您可以尝试来自较早的SO-answer的类似操作:

bool debug = MyInvocation.BoundParameters.ContainsKey("Debug") &&
             ((SwitchParameter)MyInvocation.BoundParameters["Debug"]).ToBool();
于 2013-12-29T14:01:11.793 回答
0

$DebugPreference 的默认值不是 Inquire,而是 SilentContinue,您可以在此处阅读。你自己的输出证明了这一点。

这里解释了正确检测为什么 WriteDebug 知道何时写入。

WriteDebug 仍然提出问题的原因是您使用 -Debug 调用了 cmdlet。我不明白为什么设置 $DebugPreference 会改变这一点。我也看不到在执行 cmdlet 时更改 -Debug 参数的方法。

我怀疑这真的是你想要的,如果是我不明白为什么。如果您解释您为什么想要这样做,也许我们可以更好地帮助您。

于 2013-12-29T22:17:29.410 回答