问题描述
在PowerShell中,我可以使用 Trace-Command
来解决参数绑定,类型转换等问题。例如:
In PowerShell I can use Trace-Command
to troubleshoot parameter binding, type conversion etc. Ex:
Trace-Command -PSHost -Name ParameterBinding -Expression { $null = "c:\" | dir}
...
DEBUG: ParameterBinding Information: 0 : Parameter [Path] PIPELINE INPUT ValueFromPipeline NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [c:\] to parameter [Path]
DEBUG: ParameterBinding Information: 0 : Binding collection parameter Path: argument type [String], parameter type [System.String[]], collection type Array, eleme
nt type [System.String], no coerceElementType
...
在PS中调试一些奇怪的行为时,我想跟踪 -lt
比较的工作原理(也许每个字符转换为 [int] [char] x
等)。我尝试使用 Trace-Command
,但它不返回任何内容。
While debugging some strange behavious in PS I wanted to trace how -lt
comparison works (maybe it converts to [int][char]"x"
for each character etc.). I tried to use Trace-Command
but it doesn't return anything.
Trace-Command -PSHost -Name TypeMatch, TypeConversion -Expression { "Less" -lt "less" }
#No trace-output, only returned value
False
#Get any type of trace-informatino
Trace-Command -PSHost -Name * -Expression { "Less" -lt "less" }
#No trace-output, only returned value
False
是否有办法找出这些内部运营商在幕后的工作方式?跟踪信息?详细的输出?我以 -lt
和 -gt
为例,但这可以&
运算符以及它如何解析命令或其他内容。
Is there any way to find out how these internal operators work behind-the-scenes? Trace information? Verbose output? I've used -lt
and -gt
as an example, but this could just as well have been the &
-operator and how it parses the command or something else.
推荐答案
不确定是否有帮助,但 -lt
和 -gt
是区分大小写的运算符,它们行为类似于-ilt和-igt。如果需要区分大小写的运算符,则应使用 -clt
和 -cgt
。
Not sure it helps but -lt
and -gt
are case un-sensitive operators they behaves like -ilt and -igt. If you want case sensitive operators you should use -clt
and -cgt
.
这是我在PowerShell 5.0中获得的结果,我不确定是否有帮助
Here is the result I obtain in PowerShell 5.0, I'am not sure it helps
Trace-Command -PSHost -Name TypeMatch, TypeConversion -Expression { "Less" -lt "less" }
DÉBOGUER : TypeConversion Information: 0 : Converting "System.Object[]" to "System.Object".
DÉBOGUER : TypeConversion Information: 0 : Result type is assignable from value to convert's type
DÉBOGUER : TypeConversion Information: 0 : Converting "" to "System.String".
DÉBOGUER : TypeConversion Information: 0 : Result type is assignable from value to convert's type
DÉBOGUER : TypeConversion Information: 0 : Converting "" to "System.String".
DÉBOGUER : TypeConversion Information: 0 : Result type is assignable from value to convert's type
DÉBOGUER : TypeConversion Information: 0 : Converting "System.Management.Automation.InvocationInfo" to "System.Management.Automation.InvocationInfo".
DÉBOGUER : TypeConversion Information: 0 : Result type is assignable from value to convert's type
DÉBOGUER : TypeConversion Information: 0 : Converting "System.Object[]" to "System.Object[]".
DÉBOGUER : TypeConversion Information: 0 : Result type is assignable from value to convert's type
False
如果使用 -cgt
,我将获得相同的跟踪,但结果为 True
。
I obtain the same trace if I use -cgt
but the result is True
.
这篇关于跟踪/调试PowerShell运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!