Powershell 表达式中的哈希表条件语句
我目前正试图从System.Object[]中提取信息,但我只想从这个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
$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