Avec les fonctions Powershell personnalisées, toutes les sorties de fonction sont renvoyées. J'essaye de supprimer cette limitation/confusion en écrivant une fonction de wrapper qui retournera juste $ true ou $ false.Powershell - Appel de fonction dynamique
Cependant, je suis aux prises avec l'appel de fonction dynamique. . . en passant spécifiquement les arguments.
Notez que le nom de la fonction et les arguments de la fonction sont passés à "ExecBoolean".
Exemple de code:
# Simplifies calls to boolean functions in Powershells scripts
# Helps solve this problem -> http://www.vistax64.com/powershell/107328-how-does-return-work-powershell-functions.html
function Foo([string]$sTest, [int] $iTest)
{
Write-Host "sTest [" $sTest "]."
Write-Host "iTest [" $iTest "]."
if ($iTest -eq 1)
{
return $true
}
else
{
return $false
}
}
function ExecBoolean ([string] $sFunctionName, [array] $oArgs)
{
Write-Host "Array Length = " $oArgs.Length ", Items = [" $oArgs[0..($oArgs.Length - 1)] "]"
$oResult = & $sFunctionName $oArgs[0..($oArgs.Length - 1)]
# Powershell returns all function output in oResult, just get the last item in the array, if necessary.
if ($oResult.Length -gt 0)
{
return $oResult[$oResult.Length - 1]
}
else
{
return $oResult
}
}
$oResult = ExecBoolean "Foo" "String1", 1
Write-Host "Result = " $oResult
Courant de sortie:
Array Length = 2 , Items = [ String1 1 ]
sTest [ String1 1 ].
iTest [ 0 ].
Result = False
sortie souhaitée:
Array Length = 2 , Items = [ String1 1 ]
sTest [ String1 ].
iTest [ 1 ].
Result = True
Est-ce possible dans Powershell v1.0?
Merci.
Merci, oui, je comprends ce qui se passe. Je pensais/espérais que $ oArgs [0 .. ($ oArgs.Length - 1)] ne serait pas considéré comme un tableau, mais une liste d'arguments 0, 1, 2, etc Je connais le "out-null" "Astuce, mais j'essaie d'éviter les problèmes qui s'ensuivent lorsque les développeurs oublient de l'utiliser ou ne savent tout simplement pas quelles instructions retournent la sortie. – MattH