[英]Wrapper function with same name as command in Powershell?
我正在尝试使用Powershell包装器脚本修复最近破坏了ls
命令的应用程序。 我的包装器必须与正在调用的命令具有相同的名称,因此我正在使用invoke-command
来调用原始命令。
# yarn broke 'ls'
function yarn() {
$modifiedArgs = @()
foreach ( $arg in $args ) {
if ( $arg -cmatch '^ls$' ) {
$arg = 'list'
}
$modifiedArgs = $modifiedArgs + $arg
}
invoke-command yarn -ArgumentList @modifiedArgs
}
但是, invoke-command
失败,并且
Invoke-Command : Parameter set cannot be resolved using the specified named parameters
如何使用修改后的参数运行原始命令?
编辑:我也尝试了-ArgumentList (,$modifiedArgs)
每个数组传递给另一个脚本与Invoke-Command ,我仍然遇到相同的错误。
编辑:看起来像invoke-command
只是远程。 我也尝试了Invoke-Expression "& yarn $modifiedArgs"
但是它本身运行函数。
根据powershell文档 , &
运算符可以工作:
# yarn broke 'ls'
function yarn() {
$modifiedArgs = @()
foreach ( $arg in $args ) {
if ( $arg -cmatch '^ls$' ) {
$arg = 'list'
}
$modifiedArgs += $arg
}
& 'C:\Program Files (x86)\Yarn\bin\yarn.cmd' $modifiedArgs
}
仍然很乐意接受其他不涉及明确指定命令路径的答案。
我相信,如果将包装函数的作用域限定为私有,则可以指定命令的完整路径:
# yarn broke 'ls'
function Private:yarn() {
$modifiedArgs = @()
foreach ( $arg in $args ) {
if ( $arg -cmatch '^ls$' ) {
$arg = 'list'
}
$modifiedArgs += $arg
}
& yarn $modifiedArgs
}
这将防止该功能在子作用域中可见,并且将恢复使用该应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.