尝试阻止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
那么,为什么,如果上面的重置有效,我还处于查询模式吗?我该如何改变呢?
答案 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参数的方法。
我怀疑这真的是你想要的,如果是,我不明白为什么。如果您解释为什么要这样做,我们可以帮助您。