Ich habe oft die folgende Situation in meinem PowerShell-Code: Ich habe eine Funktion oder eine Eigenschaft, die eine Auflistung von Objekten oder $null
zurückgibt. Wenn Sie die Ergebnisse in die Pipeline übertragen, behandeln Sie auch ein Element in der Pipeline, wenn $null
das einzige Element ist.
Beispiel:
$Project.Features | Foreach-Object { Write-Host "Feature name: $($_.Name)" }
Wenn es keine Merkmale sind ($ project.Features liefert $ null), werden Sie nur eine einzige Zeile mit siehe "Feature-Name:".
Ich sehe drei Möglichkeiten, dies zu lösen:
if ($Project.Features -ne $null)
{
$Project.Features | Foreach-Object { Write-Host "Feature name: $($_.Name)" }
}
oder
$Project.Features | Where-Object {$_ -ne $null) | Foreach-Object {
Write-Host "Feature name: $($_.Name)"
}
oder
$Project.Features | Foreach-Object {
if ($_ -ne $null) {
Write-Host "Feature name: $($_.Name)" }
}
}
Aber eigentlich mag ich nicht jeder dieser Ansätze, aber was tun Sie sehen als den besten Ansatz?
Das Problem mit dem prägnanten Kurzschrift ist, dass es irgendetwas, das nötigt ablehnen zu 'false', was Dinge wie' 0', '" '', '@()', '@ (0)', ... beinhaltet, würde ich wahrscheinlich erwarten, dass "Skip-Null" nur "$" überspringt null ". Ich weiß, dass im Zusammenhang mit dieser Frage das Ergebnis dasselbe ist, aber für einen Filter, der auch anderswo verwendet werden könnte ... – Joey
@joey guter Punkt. – x0n
leider '@() |? {$ False}' gibt immernoch $ null zurück, anstatt eine leere Liste zu senden – ekkis