powershell - PowerShell中的包装函数: Pass remaining parameters

标签 powershell parameters

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

所以它应该看起来像这样:

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

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

最佳答案

这就是你所要求的。如果您需要将破折号前缀的选项传递给与 PowerShell 通用参数冲突或导致歧义的可执行文件,您可能会遇到麻烦。但这可能会让您开始。

function Invoke-MyProgram
{
    [CmdletBinding()]
    Param
    (
        [parameter(mandatory=$true, position=0)][string]$Option,
        [parameter(mandatory=$false, position=1, ValueFromRemainingArguments=$true)]$Remaining
    )

    if ($Option -eq 'A')
    {
        Write-Host $Remaining
    }
    elseif ($Option -eq 'B')
    {
        & 'C:\Program Files\some\program.exe' @Remaining # NOTE: @ not $ (splatting)
    }
}

关于powershell - PowerShell中的包装函数: Pass remaining parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7415883/

相关文章:

java - 将带有 "?"参数的字符串格式化为 java 中的完整字符串的方法?

Powershell New-SmbMapping 驱动器只能从 Powershell 访问

Powershell 前景色

powershell - 在 Powershell 中不使用 dispose() 有多糟糕?

powershell - 我可以为 PowerShell 中的参数指定条件默认值吗?

parameters - drf-yasg swagger 设置参数 IN_BODY 不起作用

php - 如何在不使用 php 中的函数的情况下将变量从一个类传递到另一个类?

azure - Powershell更新手机字段

powershell - 如何使用 PowerShell 合并/ 'flatten' 文件夹结构 - 递归

javascript - 在 html 表单中存储和加载选定元素的正确方法是什么?