在ForEach循环中存储变量

时间:2016-10-07 00:34:11

标签: loops powershell

我有很多设备的季节性评级数据集。每件设备当前具有3个数据对象,顺序为:Summer> Winter>(Spring& Fall)。我想简化这一点,因此每件设备只有一行评级。

$Equipment|%{if($_.C100_SP -match "Winter"){$aW=$_.A100_SU,$bW=$_.B100_SU,$cW=$_.C100_SU}elseif($_.C100_SP -match "Summer"){$aS=$_.A100_SU,$bS=$_.B100_SU,$cS=$_.C100_SU}elseif($_.C100_SP -match "Spring"){$_.A100_SP=$_.A100_F=$_.A100_SU;$_.B100_SP=$_.B100_F=$_.B100_SU;$_.C100_SP=$_.C100_F=$_.C100_SU;$_.A100_SU=$aS;$_.B100_SU=$bS;$_.C100_SU=$cS;$_.A100_W=$aW;$_.B100_W=$bW;$_.C100_W=$cW;$_.A='x'}}|Where-Object{$_.A -eq 'x'}

此代码尝试将夏季和冬季评级存储为变量($ aW,$ bS等),将它们插入到弹簧记录中,然后过滤,以便只留下填写的记录。但是,冬季和秋季变量不断传递$ null到输出,以及9999,这是此数据集中的常见占位符。

A100_SP    : 4219
B100_SP    : 4219
C100_SP    : 9999
A100_SU    : {9999, $null}
B100_SU    : 
C100_SU    : 
A100_F     : 4219
B100_F     : 4219
C100_F     : 9999
A100_W     : {9999, $null}
B100_W     : 
C100_W     : 

Spring和fall值正在运行,这让我觉得这是在迭代之间存储变量的问题,但我无法在网上找到很多帮助。

如何让这些变量保持不变?

1 个答案:

答案 0 :(得分:1)

  • 第一个if子句中的错误语句分隔:,。它应该是;
  • 没有任何事情被推到管道上:$_案例末尾应该Spring
  • 而不是Where在冬季和夏季根本不输出任何东西。

$Equipment | %{
    switch -regex ($_.C100_SP) {
        "Winter" {
            $aW = $_.A100_SU
            $bW = $_.B100_SU
            $cW = $_.C100_SU
            break
        }
        "Summer" {
            $aS = $_.A100_SU
            $bS = $_.B100_SU
            $cS = $_.C100_SU
            break
        }
        "Spring" {
            $_.A100_SP = $_.A100_F = $_.A100_SU
            $_.B100_SP = $_.B100_F = $_.B100_SU
            $_.C100_SP = $_.C100_F = $_.C100_SU
            $_.A100_SU = $aS
            $_.B100_SU = $bS
            $_.C100_SU = $cS
            $_.A100_W = $aW
            $_.B100_W = $bW
            $_.C100_W = $cW
            $_
        }
    }
}

P.S。如果你不能闭着眼睛写它们,就不要使用单行: - )