I've written function 'A' that will call one of a number of other functions. To save re-writing function 'A', I'd like to pass the function to be called as a parameter of function 'A'. For example:
function A{
Param($functionToCall)
Write-Host "I'm calling : $functionToCall"
}
function B{
Write-Host "Function B"
}
Function C{
write-host "Function C"
}
A -functionToCall C
Returns: I'm calling: C
I am expecting it to return: I'm calling: Function C.
I've tried various things such as:
Param([scriptblock]$functionToCall)
Cannot convert System.String to ScriptBlock
A -functionToCall $function:C
Returns "Write-Host "Function C"
A - functionToCall (&C)
This evaluates before the rest of it:
Function C
I'm Calling :
I'm sure this is programming 101, but I can't work out the correct syntax or what it is I'm doing wrong.
I'm not sure this is the best, but:
function A{
Param([scriptblock]$FunctionToCall)
Write-Host "I'm calling $($FunctionToCall.Invoke(4))"
}
function B($x){
Write-Output "Function B with $x"
}
Function C{
Param($x)
Write-Output "Function C with $x"
}
PS C:\WINDOWS\system32> A -FunctionToCall $function:B
I'm calling Function B with 4
PS C:\WINDOWS\system32> A -FunctionToCall $function:C
I'm calling Function C with 4
PS C:\WINDOWS\system32> A -FunctionToCall { Param($x) "Got $x" }
I'm calling Got x