如何更新阵列中的数据

时间:2014-05-21 19:32:46

标签: powershell

我从$ data中的SQL查询输出。它有三列,ID,Name,NewIssue。 新问题是正确还是错误,我希望数组有“是”和“否”。 但我不明白下面的行是如何正确执行的,

"$data.NewIssue -eq 'FALSE'" 

但是当我尝试

$data.NewIssue = 'No' 

我收到此错误...

"字符串未被识别为有效的Boolean.Couldn存储在NewIssue列中。预期类型是布尔值。"

$data | foreach {
    if ($data.NewIssue -eq 'FALSE') {
        $data.NewIssue = 'No'
        } 
    }

2 个答案:

答案 0 :(得分:0)

问题是NewIssue属性不是[String],因此它无法存储您想要的任何旧文本。它具体是[Boolean],这意味着它是真的或它是假的,并且没有关于它的ifs,ands或buts。如果你想要它是Yes或No,或是Yep或Nah,或者你需要将任何其他东西作为字符串添加到对象数组中的每个对象,如果NewIssue为True,则将该字符串设置为Yes,如果NewIssue为假,则为否。没有简单的方法可以删除我所知道的现有NewIssue成员,或者将其重新键入为字符串。

如果你真的,真的希望你可以循环遍历数组,并将每个项目添加到新数组作为新对象,包括原始ID和Name,并将NewIssue创建为字符串,如果它是True,则设置它如果是,如果为False,则将其设置为No。

答案 1 :(得分:0)

首先:你永远不应该将布尔与字符串进行比较。主要是因为:

$true -eq 'False'

PowerShell向您显示“错误”#39;对于你的布尔列,因为人们读取字符串。这并不意味着字符串' False'等于你的财产的价值。

在替换列值上:您始终可以使用Select-Object

$Data = @(
    [PSCustomObject]@{
        NewIssue = $true
        Title = 'Foo'
    }
    [PSCustomObject]@{
        NewIssue = $false
        Title = 'Bar'
    }
)

$Data | Select-Object -Property *, @{
    Name = 'NewIssue'
    Expression = {
        if ($_.NewIssue) {
            'Yes'
        } else {
            'No'
        }
    }
} -ExcludeProperty NewIssue