[英]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.