PowerShell“.count”方法导致错误处理

PowerShell“.count”方法导致错误处理

我在 PowerShell 中创建一个并不总是包含数据的数组(有时它是空的)。在尝试对数组对象执行任何操作之前,我需要验证数组是否包含数据。当我使用以下代码时,一切都按预期工作:

$Array = @(“This”,”is”,”a”,”test”)
$Array | ForEach-Object {
If ($Array.Count -ge 1)
    {
    [string]$A = $_
    Write-Host $A
    }
}

使用上述代码,我得到以下输出:

This
is
a
test

以上检查。数数每次处理数组中的一个对象时,它都会检查数组的计数(因此它可能会检查数组的计数一千次或更多次,具体取决于数组中的对象数)。我想要做的是在开始处理数组对象之前只检查一次数组的计数。但是,以下代码没有提供正确的输出:

$Array = @(“This”,”is”,”a”,”test”)
If ($Array.Count -ge 1)
{
$Array | ForEach-Object {
    {
    [string]$A = $_
    Write-Host $A
    }
}
}

当我运行上述代码时,我得到以下输出:

    [string]$A = $_
    Write-Host $A

    [string]$A = $_
    Write-Host $A

    [string]$A = $_
    Write-Host $A

    [string]$A = $_
    Write-Host $A

它没有写主机的价值澳元变量,就像前面的代码一样,但它会打印出实际的 PowerShell 代码本身。我所做的就是将。数数检查,以便在开始处理数组中的对象之前检查计数。为什么当我将数组计数检查移到ForEach 对象语句?每次处理数组中的对象时,我是否都必须检查数组计数?

谢谢

答案1

我猜 Powershell 为你的第二个示例打印此内容的原因

[string]$A = $_
Write-Host $A

[string]$A = $_
Write-Host $A

是因为 Powershell 将双括号{{}}作为字符串文字。

至于如何使其工作,您应该$Array在执行 for 循环之前进行测试。

代码如下所示:

$Array = @(“This”,”is”,”a”,”test”)
if($Array.Count -ge 1){
    foreach($A in $Array){
        Write-Host $A
    }
}

并且作为一行代码(ish)

$Array = @(“This”,”is”,”a”,”test”) 
if($Array.Count -ge 1){ $Array| %{Write-Host $_}}

相关内容