带有变量参数的 Powershell Call-Operator(&)

Fab*_*lde 5 powershell

大家好,

我正在尝试使用来自变量的参数在 PowerShell 中执行一个函数,我不确定是否可以按照我希望的方式执行,但也许有人知道我将如何执行此操作。

$scriptPath = "C:\temp\Create-File.ps1"
$parameters = "-Path C:\temp\testfile.txt -DoSomethingSpecial"

& $scriptPath $parameters
Run Code Online (Sandbox Code Playgroud)

沿着这些路线,我不知道参数以哪个顺序输入,所以我不能使用 $args[n..m] 或按位置绑定。也许还有其他一些我不知道的 Cmdlet 能够做到这一点?

Tom*_*r W 5

将对象作为@James C. 在他的回答中建议只允许以 Powershell 语法传递参数(例如-param1 value1 -param2 value2)

当您需要对传递的参数进行更多控制时,例如:

  • unix 风格的双破折号语法 --param1 value1
  • Windows 风格的斜杠语法 /param1 value1
  • 需要等号(或冒号)-param1=value1或-param1:value1
  • 没有参数值 -boolean_param1
  • 附加动词(没有参数名称的值) value1 value2

您可以使用数组而不是对象

以ipconfig命令为例,更新名称中带有“con”的所有连接:

$cmd = "ipconfig"
$params = @('/renew', '*Con*');
& $cmd $params
Run Code Online (Sandbox Code Playgroud)

或给出示例的具体问题:

$params = @('-Path', 'C:\temp\testfile.txt', '-DoSomethingSpecial')
.\Create-File.ps1 @params
Run Code Online (Sandbox Code Playgroud)


Jam*_* C. 4

您可以使用 hastable 和Splatting来执行此操作。

只需像普通的 hastable 一样设置变量中的每个参数名称和值,然后使用 using@params语法传递它。

然而,开关参数需要一个$true值才能正常运行。

$params = @{
    Path               = 'C:\temp\testfile.txt'
    DoSomethingSpecial = $true
}

.\Create-File.ps1 @params
Run Code Online (Sandbox Code Playgroud)