相关疑难解决方法(0)

PowerShell中的包装函数:传递剩余参数

我正在尝试在PowerShell中编写一个包装器函数,它基本上评估第一个参数,并基于它在计算机上运行程序.然后,包装函数的所有剩余参数都应传递给运行的程序.

所以看起来应该是这样的:

function test ( [string] $option )
{
    if ( $option -eq 'A' )
    {
        Write-Host $args
    }
    elseif ( $option -eq 'B' )
    {
        . 'C:\Program Files\some\program.exe' $args
    }
}
Run Code Online (Sandbox Code Playgroud)

现在只是添加$args不起作用,所以我需要做些什么来使它工作?另一种选择可能是使用Invoke-Expression,但感觉有点像eval我想尽可能避免,此外我认为这样做会限制我只对字符串参数吧?如果可能的话,我希望得到对包装程序/ cmdlet的完全支持 - 基本上就像动态别名一样.这甚至可能吗?

parameters powershell

8
推荐指数
2
解决办法
4875
查看次数

有没有办法以仅在将参数传递给别名时才运行的方式为 cmdlet 创建别名?

我正在尝试创建Get-Command cmdlet的别名(命名为which),如果我不发送任何参数,它就不会运行(因为如果它在没有参数的情况下运行,它会输出所有可用的命令) .

我知道这可以使用函数来完成,但我想保留选项卡完成功能,而不必编写一个相当大的函数来放入我的$PROFILE 中

简而言之,我只希望别名在传递参数时起作用。

powershell alias wrapper

5
推荐指数
1
解决办法
226
查看次数

PowerShell 传递函数中接收到的所有参数,并处理带空格的参数

我是 PowerShell 的新手。在 Msys2(或 Lnux)中,我定义了一个函数npp

npp ()
{
    ${NPP_PATH} "$@"
}
Run Code Online (Sandbox Code Playgroud)

这样,如果我从命令提示符调用,npp它会启动 Notepad++(如 中所定义${NPP_PATH})。如果我调用npp "mydir/stage 1/a.txt"它会打开该文件进行编辑。一般来说,它允许:

  1. 任意数量的参数。
  2. 包含空格的参数,如果适当转义。

PowerShell 中的等价物是什么?

我想在 PS 我也应该去寻找一个函数来获得类似的行为。到目前为止,我可以接收未定义数量的参数,并在foreach循环中使用它们,请参阅下面的代码。但是我找不到简单的等价物"$@"来传递接收到的所有参数。此外,如果我在其中一个参数中使用引号,它们将被删除,因此文件路径可能会出现问题,包括空格。

function multi_params {
    param(
        [Parameter(
            ValueFromRemainingArguments=$true
        )][string[]]
        $listArgs
    )
    $count = 0
    foreach($listArg in $listArgs) {
        '$listArgs[{0}]: {1}' -f $count, $listArg
        $count++
    }
}
Run Code Online (Sandbox Code Playgroud)

parameters powershell function variadic-functions

3
推荐指数
1
解决办法
1309
查看次数