我得到了这个ps片段:
function myFuncWithArgs($arg) {
Write-Output $arg
}
$temp = 'sometext'
$cFunc = 'myFuncWithArgs'
& $cFunc $temp
它可以工作,但我需要$temp与$cFunc在同一行,并且工作相同。这不起作用:
$cFunc = 'myFuncWithArgs' $temp
& $cFunc
这在pshell中可能吗?
我得到了这个ps片段:
function myFuncWithArgs($arg) {
Write-Output $arg
}
$temp = 'sometext'
$cFunc = 'myFuncWithArgs'
& $cFunc $temp
它可以工作,但我需要$temp与$cFunc在同一行,并且工作相同。这不起作用:
$cFunc = 'myFuncWithArgs' $temp
& $cFunc
这在pshell中可能吗?
3条答案
按热度按时间2ledvvac1#
看起来像是你试图将一个 * 完整的命令 *(可执行文件+参数)存储在一个变量中,以便 * 以后按需执行 *。
使用script block(
{ ... }
),您可以使用调用操作符&
按需调用:注意事项:
&
不能处理包含完整命令的字符串。它的参数必须是一个脚本块,如图所示,或者是命令名或可执行文件路径,并且传递给该脚本块/命令/可执行文件的任何参数都必须单独指定,例如& { Write-Output $args } arg1 ...
或& $pathToExecutable arg1 ...
上面使用了脚本块 literal。
要从 string 创建脚本块,请使用
[scriptblock]::Create()
:你提到
Read-Host
,即提示用户,作为命令字符串的来源,在这种情况下,上面的“重要:”下的警告肯定适用。Invoke-Expression
$commandString
-但请注意,Invoke-Expression
是generally discouraged,因为它能够执行存储在字符串中的任意代码。[scriptblock]::Create()
:.CheckRestrictedLanguage()
方法,以确保生成的命令仅包含Restricted
language mode中允许的命令,并可配置允许的特定命令和变量。6bc51xsx2#
你可以一次赋值给多个变量,这样就可以保持在同一行:
g2ieeal73#
调用不带方括号的函数,调用不带逗号和白色的参数。