有条件地在导入的CSV中更改布尔变量

时间:2016-03-08 18:28:27

标签: csv powershell

我正在编写一个脚本,我想将一个数组与另一个数组进行比较,并根据结果更改一个布尔值(从$ false到$ true)。这对使用Replace方法的字符串工作正常,但对于布尔值不存在。谁能告诉我怎么做?

$bv是一个对象数组,如下所示。

ServerName,Domain,Environment,Tier0
ServerA,usa,dev,$false
ServerB,usa,sit,$false

我正在尝试将该列表与另一个Tier0计算机列表($t0List)进行比较。

ServerB
ServerC
ServerD

因此,如果$bv的第1列中的ServerName与$t0List中的条目匹配,那么我想将Tier0中的$bv列更改为$true

foreach ($b in $bv) {
if ($t0List -contains $b.ServerName) {
    $b.Tier0.Replace($b.Tier0,$true)
    }
}

上面代码的错误是......

Method invocation failed because [System.Boolean] does not contain a method named 'Replace'.

2 个答案:

答案 0 :(得分:2)

不需要使用替换之类的内容,只需使用=

分配值即可
foreach ($b in $bv) {
    if ($t0List -contains $b.ServerName) {
        $b.Tier0 = $true
    }
}

想要进一步简化吗?只需为其分配-contains

的结果即可
foreach ($b in $bv) {
    $b.Tier0 = $t0List -contains $b.ServerName
}

答案 1 :(得分:0)

也许这会对你有所帮助:

您只需告诉$true

,就可以在$false-not之间切换

-not $true带回$false

-not $false 带回来 $true

所以

    foreach ($b in $bv) {
if ($t0List -contains $b.ServerName) {
    $b.Tier0 = -not ($b.Tier0) 
   }
}

    foreach ($b in $bv) {
if ($t0List -contains $b.ServerName) {
    $b.Tier0 = $true
    }
}

应该有效