J'ai souvent la situation suivante dans mon code PowerShell: J'ai une fonction ou une propriété qui retourne une collection d'objets, ou $null
. Si vous insérez les résultats dans le pipeline, vous gérez également un élément dans le pipeline si $null
est le seul élément.
Exemple:
$Project.Features | Foreach-Object { Write-Host "Feature name: $($_.Name)" }
S'il n'y a pas de caractéristiques ($ retourne Project.Features $ null), vous verrez une seule ligne avec "nom d'entité:".
Je vois trois façons de résoudre ce:
if ($Project.Features -ne $null)
{
$Project.Features | Foreach-Object { Write-Host "Feature name: $($_.Name)" }
}
ou
$Project.Features | Where-Object {$_ -ne $null) | Foreach-Object {
Write-Host "Feature name: $($_.Name)"
}
ou
$Project.Features | Foreach-Object {
if ($_ -ne $null) {
Write-Host "Feature name: $($_.Name)" }
}
}
Mais en fait je n'aime pas l'une de ces approches, mais qu'est-ce que vous voyez comme la meilleure approche?
Le problème avec le raccourci concis est qu'il rejettera tout ce qui contraint à 'false', qui inclut des choses comme' 0', '" "', '@()', '@ (0)', ... Je m'attendrais probablement à ce que 'Skip-Null' saute seulement' '$ '' null'. Je sais que dans le contexte de cette question le résultat est le même, mais pour un filtre qui pourrait être utilisé ailleurs aussi ... – Joey
@joey bon point. – x0n
malheureusement '@() |? {$ False}' renvoie toujours $ null au lieu de retourner une liste vide – ekkis