如何将Powershell函数作为参数分配给其他函数';s参数
所以,我有两个功能: 第一个功能:如何将Powershell函数作为参数分配给其他函数';s参数,powershell,scripting,Powershell,Scripting,所以,我有两个功能: 第一个功能: function FunctionExecutor { param ( $function ) } function StartSSHsession { Write-Host "Hi" } 第二个功能是: function FunctionExecutor { param ( $function ) } function StartSSHsession {
function FunctionExecutor
{
param
(
$function
)
}
function StartSSHsession
{
Write-Host "Hi"
}
第二个功能是:
function FunctionExecutor
{
param
(
$function
)
}
function StartSSHsession
{
Write-Host "Hi"
}
问题:如何通过将StartShsSession传递到FunctionExecuter来执行它
这是什么也不执行
FunctionExecutor -function: StartSSHsession
一种方法是:
记住你只是在传递名字
使用附加参数和使用自动变量的示例:
function StartSSHsession
{
param(
[switch]$useEmail
)
if($useEmail){
Write-Host "Use Email"
}else{
Write-Host "Hi"
}
}
function FunctionExecutor
{
param
(
[switch]$useEmail,
$function
)
. $function @PSBoundParameters
}
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
:
…这将产生:
Hi: Bar
或者,您可以将要单独传递给脚本块的参数作为参数直接传递给CodeExecutor
,后者可以将其作为和$ScriptBlock…
至于你所尝试的: 这是不执行任何操作。
FunctionExecutor-函数:StartSSHsession
您没有向我们展示您在
FunctionExecutor
内部对参数$Function
所做的操作,但是,在没有显式键入参数的情况下,传递的特定令牌-StartSSHsession
-被解释为字符串[System.string]
您希望通过这样做实现什么?我想参数化一个发送电子邮件的函数,我想在另一个具有动态参数的函数中使用send email函数。您想要的已经内置到PowerShell中。它被称为。太好了,所以当我运行FunctionExecutor-function StartShsSession时它工作了。我可以使用multip吗函数执行器中的le参数?例如?param($function,[Bool]useEmail)@Hashim77这是可行的-请参阅编辑。我建议[switch]
跳过[Bool]
除非您有使用它的特定原因。此外,除非函数执行器
将运行具有类似参数的类似函数,否则值得考虑另一种方法。例如,使用启动会话
函数和其他函数