所以,我有两个功能: 第一个功能:
function FunctionExecutor
{
param
(
$function
)
}
第二个功能是:
function StartSSHsession
{
Write-Host "Hi"
}
问题:如何通过将StartSSHSession传递给FunctionExecuter来执行它?
这不执行任何操作。
FunctionExecutor -function: StartSSHsession
答案 0 :(得分:1)
一种方法是dot-source:
function FunctionExecutor
{
param
(
$function
)
. $function
}
请记住,你只是传过这个名字。
使用其他Switch
参数并使用$PSBoundParameters自动变量的示例:
function StartSSHsession
{
param(
[switch]$useEmail
)
if($useEmail){
Write-Host "Use Email"
}else{
Write-Host "Hi"
}
}
function FunctionExecutor
{
param
(
[switch]$useEmail,
$function
)
. $function @PSBoundParameters
}
答案 1 :(得分:0)
PowerShell传递代码的方式是通过脚本块 ([scriptblock]
类型的实例,您可以使用{ ... }
逐字地 创建并传递为&
和 执行,呼叫运营商。
因此,请按如下方式定义您的功能:
function CodeExecutor
{
# Make the function an *advanced* function, which prevents attempts to
# use undeclared parameters.
[CmdletBinding()]
param
(
# Define the piece of functionality to accept as a [scriptblock]
[scriptblock] $ScriptBlock
)
# Invoke the script block with `&`
& $ScriptBlock
}
现在,在之后定义StartSSHsession
...
function StartSSHsession {
param(
$Foo
)
Write-Host "Hi: $Foo"
}
...您可以使用带参数的脚本块将其传递给CodeExecutor
,如下所示:
CodeExecutor -ScriptBlock { StartSSHsession Bar }
......产生:
Hi: Bar
或者,您可以将参数单独传递给脚本块,作为CodeExecutor
的参数直接传递,然后可以将其传递给& $ScriptBlock ...
至于您尝试的内容:
这一切都没有执行
FunctionExecutor -function: StartSSHsession
您没有向我们展示您在$Function
内使用参数FunctionExecutor
所做的事情,但是,如果没有明确的输入参数 ,传递的特定令牌 - StartSSHsession
- 被解释为字符串 [System.String]
。