If you are ready to sacrifice the [scriptblock]
parameter type declaration
then there is one more way, arguably the simplest to use and effective. Just
remove [scriptblock]
from the parameter (or replace it with [object]
):
function Get-MyName { "George" }
function Say-Hi($to) {
Write-Host ("Hi "+(& $to))
}
Say-Hi Get-MyName
Say-Hi { "George" }
So now $to
can be a script block or a command name (not just a function but also alias, cmdlet, and script).
The only disadvantage is that the declaration of Say-Hi
is not so self describing.
And, of course, if you do not own the code and cannot change it then this is
not applicable at all.
I wish PowerShell has a special type for this, see this suggestion.
In that case function Say-Hi([command]$to)
would be ideal.
Say-Hi {Get-MyName}
? Is there a type other than[scriptblock]
that would allow passing of named functions? – Correspondence