PowerShell VB.NET cmdlet。更改-DEBUG开关

时间:2013-12-29 06:21:21

标签: vb.net powershell cmdlet

尝试阻止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

那么,为什么,如果上面的重置有效,我还处于查询模式吗?我该如何改变呢?

2 个答案:

答案 0 :(得分:1)

public PSVariableIntrinsics PSVariable { get; }

来源:MSDN

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

至于检测调试设置,您可以尝试类似于早期SO-answer的内容:

bool debug = MyInvocation.BoundParameters.ContainsKey("Debug") &&
             ((SwitchParameter)MyInvocation.BoundParameters["Debug"]).ToBool();

答案 1 :(得分:0)

$ DebugPreference的默认值不是Inquire,而是SilentContinue,因为你可以阅读here。你自己的输出证明了它。

正确检测WriteDebug知道何时写入的原因是explained here

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

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