Powershell 表达式中的哈希表条件语句

Powershell 表达式中的哈希表条件语句,powershell,math,expression,conditional,hashtable,Powershell,Math,Expression,Conditional,Hashtable,我目前正试图从System.Object[]中提取信息,但我只想从这个$var中获取Col1和Col2,因为它有很多不必要的列。 设置: 期望的: $res= .. Col1 Col2 Col3 .. 1 2147483648 2 GB .. 2 524288000 500 MB .. 3 268435456000 250 GB .. 4 26843

我目前正试图从System.Object[]中提取信息,但我只想从这个
$var
中获取
Col1
Col2
,因为它有很多不必要的列。 设置:

期望的:

   $res= 
   ..     Col1  Col2          Col3
   ..     1     2147483648    2 GB
   ..     2     524288000     500 MB
   ..     3     268435456000  250 GB 
   ..     4     268435456000  250 GB
我可以使用下面的代码获得所需的Col3:

foreach($t in $var)
{
    if($t.Col2% ([math]::pow(1024,3)))
    {
        $t.Col2/([math]::pow(1024,2))" MB"
    }
    else
    {
        $t.Col2/([math]::pow(1024,3))" GB"
    }
}
$var| Select `
@{`
    l='test';`
    e=`
        {`
            if($_.Col2% ([math]::pow(1024,3)))`
            {`
                $_.Col2/([math]::pow(1024,2))"MB"`
            }`
            else`
            {`
                $_.Col2/([math]::pow(1024,3))"GB"`
            }`
        }`
}
但是,这只是显示Col3,而不是其他列,我想从选择列和使用列表达式中获得某种哈希表,但如果我在下面代码的表达式中放入带有if和ELSE的条件语句,我将无法获得任何结果:

foreach($t in $var)
{
    if($t.Col2% ([math]::pow(1024,3)))
    {
        $t.Col2/([math]::pow(1024,2))" MB"
    }
    else
    {
        $t.Col2/([math]::pow(1024,3))" GB"
    }
}
$var| Select `
@{`
    l='test';`
    e=`
        {`
            if($_.Col2% ([math]::pow(1024,3)))`
            {`
                $_.Col2/([math]::pow(1024,2))"MB"`
            }`
            else`
            {`
                $_.Col2/([math]::pow(1024,3))"GB"`
            }`
        }`
}
我的主要目标是提取这些列并将它们大容量插入SQL中的表中,但是我无法使用ELSE使表达式工作,但是如果我只指定if条件,那么它似乎可以工作


我想知道这是否是powershell中哈希表表达式中if-ELSE语句的限制。

您应该向对象添加一个
ScriptProperty
来计算它,然后像调用常规属性一样调用它。定义脚本属性使用
addmember
和scriptblock,但使用
$this
而不是
$\ucode>来引用当前对象

$var | Add-Member -MemberType ScriptProperty -Name DisplaySize -Value {
        if($this.Col2 % ([math]::pow(1024,3)))
        {
            $this.Col2/([math]::pow(1024,2))"MB"
        }
        else
        {
            $this.Col2/([math]::pow(1024,3))"GB"
        }
    }
} -Force

$var[0].DisplaySize
另外,正如您所知,PowerShell包含KB/MB/GB/等的速记语法:

1MB  # equivalent to writing 1048576
3TB  # equivalent to writing 3298534883328