<p>PowerShell 7+</p>
<p><a href="https://learn.microsoft.com/en-gb/powershell/scripting/whats-new/what-s-new-in-powershell-70?view=powershell-7#null-coalescing-assignment-and-conditional-operators">PowerShell 7 introduit</a> nativement les operateurs de coalescence nulle, d’affectation conditionnelle nulle et ternaire dans PowerShell.</p>
<p><strong>Coalescence nulle</strong></p>
<pre><code class="lang-auto">$null ?? 100 # Le resultat est 100
"Evaluated" ?? (Expensive-Operation "Not Evaluated") # Le cote droit ici n'est pas evalue
</code></pre>
<p><strong>Affectation conditionnelle nulle</strong></p>
<pre><code class="lang-auto">$x = $null
$x ??= 100 # $x vaut maintenant 100
$x ??= 200 # $x reste 100
</code></pre>
<p><strong>Operateur ternaire</strong></p>
<pre><code class="lang-auto">$true ? "cette valeur est retournee" : "cette expression n'est pas evaluee"
$false ? "cette expression n'est pas evaluee" : "cette valeur est retournee"
</code></pre>
<p>Versions precedentes :</p>
<p>Pas besoin des PowerShell Community Extensions, vous pouvez utiliser les instructions if standard de PowerShell comme expression :</p>
<pre><code class="lang-auto">variable = if (condition) { expr1 } else { expr2 }
</code></pre>
<p>Donc les remplacements de votre premiere expression C# :</p>
<pre><code class="lang-auto">var s = myval ?? "new value";
</code></pre>
<p>deviennent l’un des suivants (selon la preference) :</p>
<pre><code class="lang-auto">$s = if ($myval -eq $null) { "new value" } else { $myval }
$s = if ($myval -ne $null) { $myval } else { "new value" }
</code></pre>
<p>ou selon ce que $myval pourrait contenir, vous pouvez utiliser :</p>
<pre><code class="lang-auto">$s = if ($myval) { $myval } else { "new value" }
</code></pre>
<p>et la seconde expression C# se transpose de maniere similaire :</p>
<pre><code class="lang-auto">var x = myval == null ? "" : otherval;
</code></pre>
<p>devient</p>
<pre><code class="lang-auto">$x = if ($myval -eq $null) { "" } else { $otherval }
</code></pre>
<p>Maintenant, pour etre honnete, ce n’est pas tres concis, et loin d’etre aussi confortable a utiliser que les formes C#.</p>
<p>Vous pourriez egalement envisager de l’encapsuler dans une fonction tres simple pour rendre les choses plus lisibles :</p>
<pre><code class="lang-auto">function Coalesce($a, $b) { if ($a -ne $null) { $a } else { $b } }
$s = Coalesce $myval "new value"
</code></pre>
<p>ou eventuellement sous la forme IfNull :</p>
<pre><code class="lang-auto">function IfNull($a, $b, $c) { if ($a -eq $null) { $b } else { $c } }
$s = IfNull $myval "new value" $myval
$x = IfNull $myval "" $otherval
</code></pre>
<p>Comme vous pouvez le voir, une tres</p>
<p><em>(Reponse tronquee)</em></p>