PowerShell 开关块和以 64 位编码的值

问题描述 投票:0回答:1

当涉及 64 位整数时,我无法使用 PowerShell Switch 语句。

我有以下 PowerShell 片段:

PS D:\> cat .\dirSize.ps1
$dirName = $args[0]
$dirSize = [uint64]( ( dir "$dirName" -force -recurse | measure -property length -sum ).Sum )
switch( $dirSize ) {
    { $_ -in 1tb..1pb } { "{0:n2} TiB" -f ( $dirSize / 1tb ); break }
}

我收到此错误:

Cannot convert value "1099511627776" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
At C:\Users\sebastien.mansfeld\psh\dirSize.ps1:4 char:4
+     { $_ -in 1tb..1pb } { "{0:n2} TiB" -f ( $dirSize / 1tb ); break }
+       ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastIConvertible

所以我尝试将开关测试线转换为

uint64
,但它不起作用:

switch( $dirSize ) {
    { [uint64]$_ -in [uint64]1tb..[uint64]1pb } { "{0:n2} TiB" -f ( $dirSize / 1tb ); break }
}

我收到同样的错误消息。

我期待开关条件起作用。

powershell switch-statement 64-bit
1个回答
0
投票

改变你的条件以获得更有效的东西,不会抛出越界错误:

switch ( $dirSize ) {
    { $_ -ge 1tb -and $_ -le 1pb } {
        '{0:n2} TiB' -f ( $dirSize / 1tb ); break 
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.