【发布时间】:2022-01-30 20:06:34
【问题描述】:
我正在编写一个使用控制台应用程序中的 cmdlet 的脚本,我们将 cmdlet 称为 cmdA。我无法控制 cmdA 的实现。 cmdA 使用双破折号获取参数 (cmdA --param1 value1 --param2 value2 --param3 value3 --param4 value4 --param5 value5)
现在 param2、param3、param4 和 param5 是可选的。我的脚本的用户可能会也可能不会为这些可选参数提供值。在脚本中,我使用用户为其提供值的参数形成了一个哈希表。我们称之为 paramHashtable。
我正在执行 cmdA @paramHashtable 但这不起作用。我认为它必须用双破折号做一些事情,因为这种方法适用于带有单破折号参数的 cmd
将参数传递给 cmdA 的有效方法是什么(一种低效的方法是使用许多 if 块来检查提供了哪些值并相应地进行调用)
已编辑*
这就是我创建哈希表的方式:-
$optionalParameters = @{}
$optionalParameters = ParameterSelection ${OutputFolder} ${PerfQueryIntervalInSec} ${StaticQueryIntervalInSec} ${NumberOfIterations}
$requiredParameters = @{"sqlConnectionStrings " = "$SqlConnectionStrings"}
$parameters = $requiredParameters + $optionalParameters
function ParameterSelection ([string] $outputFolder, [string] $perfQueryIntervalInSec, [string] $staticQueryIntervalInSec, [string] $numberOfIterations)
{
$parametersList = @{}
if($outputFolder -ne "")
{
$parametersList["outputFolder "] = $outputFolder
}
if($perfQueryIntervalInSec -ne "")
{
$parametersList["perfQueryIntervalInSec "] = $perfQueryIntervalInSec
}
if($staticQueryIntervalInSec -ne "")
{
$parametersList["staticQueryIntervalInSec "] = $staticQueryIntervalInSec
}
if($numberOfIterations -ne "")
{
$parametersList["numberOfIterations "] = $numberOfIterations
}
return $parametersList
}
我就是这样称呼它的:-
& $ExePath actionName @parameters
$ExePath 有要执行的程序的路径 actionName 采用如下参数:-
actionName --sqlConnectionStrings "Data Source=Server1" --outputFolder C:\Output
【问题讨论】:
-
请编辑您的问题以显示您当前的脚本
-
如果它“接受带有双破折号的参数”,它就不可能是一个 cmdlet,它必须是一个常规的可执行程序。
-
@SantiagoSquarzon 已编辑。请看一下
-
如果您正在运行带有哈希表的二进制 splatting 可能无法正常工作,您需要改为 splat 一个数组。
-
Hashtable splatting 使用具有 double 或 sinlge dash 的 cmdlet 可以正常工作,但您的可能不是 cmdlet,而是我之前所说的 Tomalak 的二进制文件
标签: powershell azure-powershell