我有一个函数,我应该可以从我的 powershell 脚本中的任何位置调用它。
问题是它不能识别脚本块中的函数。
在下面的示例中,我有一个getNumberFive
应该返回数字 5的函数。
我希望能够在我开始一项新工作时以及在脚本结束时在脚本块中使用这个函数。
预期结果:
将数字15写入文件“C:\tmp\result.txt”
写入控制台:“我喜欢数字 5”
实际上:
将数字10写入文件“C:\tmp\result.txt”
写入控制台:“我喜欢数字 5”
我可以通过在脚本块中定义相同的函数来解决这个问题,但是我将复制该函数,这不是一个好的编程。
另一种方法是定义:
$func = {
function getNumberFive(){
return 5
}
}
$scriptBlock = {
Function printSum(){
$number = getNumberFive
$newNumber = 10 + $number # => $newNumber should be 15
$newNumber >> "C:\tmp\result.txt"
}
}
Start-Job -ScriptBlock $scriptBlock -InitializationScript $func
但在这种情况下,我将无法调用$five = getNumberFive
.
我阅读了许多方法,但我不明白如何准确地使用它们:
CALLING A POWERSHELL FUNCTION IN A START-JOB SCRIPT BLOCK WHEN 它在同一个脚本中定义
在带参数的函数上使用 Invoke-Command -ScriptBlock
我的脚本:
function getNumberFive(){
return 5
}
$scriptBlock = {
Function printSum(){
# $number = getNumberFive => DOESN'T WORK
# $number = Invoke-Expression ($(get-command getNumberFive) | Select -ExpandProperty Definition) => DOESN'T WORK AS EXPECTED
# $number = &(${function:getNumberFive}) => DOESN'T WORK AS EXPECTED
# $number = &(Get-Item function:getNumberFive) => DOESN'T WORK AS EXPECTED
$newNumber = 10 + $number # => $newNumber should be 15
$newNumber >> "C:\tmp\result.txt"
}
printSum
}
Start-Job -ScriptBlock $scriptBlock
$five = getNumberFive
Write-Host "I like the number"$five
Get-Job | Wait-Job
Get-Job | Stop-Job
Get-Job | Remove-Job