Powershell echo[uint32]:maxvalue表示';uint32::maxvalue';而不是4294967295

Powershell echo[uint32]:maxvalue表示';uint32::maxvalue';而不是4294967295,powershell,Powershell,及 我相信powershell这样做是有充分理由的:-)。有没有办法让我告诉它不要这样做。我实际上是在向一个函数传递和int,有时我想传递maxvalue 我知道我能行 [DBG]: PS C:\Windows\system32>>> $mv = [uint32]::maxvalue [DBG]: PS C:\Windows\system32>>> echo $mv 4294967295 我想知道是否有类似的事情 $mv = [uint32]::maxval

我相信powershell这样做是有充分理由的:-)。有没有办法让我告诉它不要这样做。我实际上是在向一个函数传递和int,有时我想传递maxvalue

我知道我能行

[DBG]: PS C:\Windows\system32>>> $mv = [uint32]::maxvalue
[DBG]: PS C:\Windows\system32>>> echo $mv
4294967295
我想知道是否有类似的事情

$mv = [uint32]::maxvalue
MyFunc $mv

etc

原因是
echo
命令将参数解释为
字符串,而不是任意值。因此,在第一个例子中,它逐字打印参数,而不是将其解释为值。在第二种情况下,虽然它被解释为一个表达式并被赋值

您可以通过自己创建一个函数来复制此行为,该函数将输出回显到控制台

MyFunc ([uint32]::maxvalue)
MyFunc `[uint32::maxvalue`
您还可以通过使用
()
s将其指定为表达式,强制
echo
函数将其解释为值

function example { 
  param ([string]$arg)
  Write-Output $arg
}

example [uint]
> [uint]
example 42
> 42

PowerShell在解释命令时使用两种模式:参数模式和表达式模式(请参阅关于解析主题)

下面是在表达式模式下解析的,这就是为什么要返回值

echo [uint32]::maxvalue
> [uint32]::maxvalue
echo ([uint32]::maxvalue)
> 4294967295
在参数模式下,所有内容都被视为字符串,除非它以以下字符之一开头: $,@,“,”(

参数(-InputObject)被解析为字符串并按字面意义进行回显。要对其求值,您需要强制将其识别为表达式,并将其封装在参数中执行以下操作:

echo [uint32]::maxvalue

实际上这是我自己的函数,我没有指定类型——我猜它默认为字符串
$mv = [uint32]::maxvalue
echo $mv
echo [uint32]::maxvalue
echo ([uint32]::maxvalue)
4294967295