Arrays 在这段代码中,PowerShell foreach怎么可能会因为空数组而失败?

Arrays 在这段代码中,PowerShell foreach怎么可能会因为空数组而失败?,arrays,powershell,foreach,Arrays,Powershell,Foreach,此powershell代码如何可能因“无法索引到空数组”而失败?这对我来说毫无意义。当然$cloudPfx应该是非空数组吗 $cloudPfx = @( "Foo.pfx", "Bar.pfx", $SSLCertFileName ) $cloudPfx | foreach { ## call some function... Save-Pfx "Foo\$_" (Join-Path $SomePath "Bar$_") } foreach : Cannot index int

此powershell代码如何可能因“无法索引到空数组”而失败?这对我来说毫无意义。当然$cloudPfx应该是非空数组吗

$cloudPfx = @( "Foo.pfx", "Bar.pfx", $SSLCertFileName )
$cloudPfx | foreach {
    ## call some function...
    Save-Pfx "Foo\$_" (Join-Path $SomePath "Bar$_")
}

foreach : Cannot index into a null array.
At [that line]
+     $cloudPfx | foreach {
+                 ~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [ForEach-Object], RuntimeException
+ FullyQualifiedErrorId : NullArray,Microsoft.PowerShell.Commands.ForEachObjectCommand

因此,通过添加调试输出语句,问题实际上发生在Save Pfx函数中。只是错误的表述是完全错误的。(我想罗曼可能对此有所怀疑,因为他建议切换到foreach语句。)

不应该这样做,即使
$SSLCertFileName
为空。有鉴于此,这段代码中肯定有比发布内容更多的内容。例如,
$SSLCertFileName
中有什么内容?代码是偶然复制/粘贴的吗?是否有任何错误的特殊字符显示为空格?请尝试使用
foreach
语句而不是cmdlet。例如,将您的代码更改为
foreach($\ in$cloudPfx){..}
。这不会解决您的问题,但您希望得到更好的错误消息。也可以使用这一行,而不是原来不正确的:
Save Pfx“Foo\$”(Join Path$SomePath“Bar$)