gpt4 book ai didi

windows - 通过变量执行cmdlet?

转载 作者:可可西里 更新时间:2023-11-01 14:40:35 26 4
gpt4 key购买 nike

我想使用 if\else 语句来确定运行哪个 cmdlet,同时为两个命令保持相同的参数:

例如我有这个电话:

    New-AzureRmResourceGroupDeployment `
-ResourceGroupName $ResourceGroup `
-TemplateFile $TemplateUri `
-TemplateParameterFile $TemplateParamFile

但是我想用一个变量来确定动词:

    $myVerb = if ($booleanTest) {"Test"} else {"New"}
[$myVerb]-AzureRmResourceGroupDeployment `
-ResourceGroupName $ResourceGroup `
-TemplateFile $TemplateUri `
-TemplateParameterFile $TemplateParamFile

或者像这样:

    $command = if ($booleanTest) {"Test-AzureRmResourceGroupDeployment"} else {"New-AzureRmResourceGroupDeployment"}
$command `
-ResourceGroupName $ResourceGroup `
-TemplateFile $TemplateUri `
-TemplateParameterFile $TemplateParamFile

我尝试了 $command 版本,但失败了:

At C:\Users\Administrator\Dropbox\projects\deloitte\Suncore\Dev\scripts\az-d eploy.ps1:36 char:13 + -ResourceGroupName $ResourceGroup
+ ~~~~~~~~~~~~~~~~~~ Unexpected token '-ResourceGroupName' in expression or statement. At
C:\Users\Administrator\Dropbox\projects\deloitte\Suncore\Dev\scripts\az-d
eploy.ps1:36 char:32
+ -ResourceGroupName $ResourceGroup
+ ~~~~~~~~~~~~~~

最佳答案

要准确执行您所描述的操作,您需要将整个命令包装为一个字符串,然后使用 Invoke-Expression 调用它。例如:

$MyCommand = "$myVerb-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroup -TemplateFile $TemplateUri"
Invoke-Expression $MyCommand

但我认为这不是一种非常清晰的脚本编写方式。更好的选择是使用 Splatting ,您可以在其中创建参数的哈希表,然后可以通过带有变量名称的特殊 @ 字符发送 cmdlet。例如:

$AzureParams = @{ 
ResourceGroupName = $ResourceGroup
TemplateFile = $TemplateUri
TemplateParameterFile = $TemplateParamFile
}

If ($booleanTest) {
Test-AzureRmResourceGroupDeployment @AzureParams
} Else {
New-AzureRmResourceGroupDeployment @AzurParams
}

这也有避免使用反引号字符的好处,通常鼓励使用反引号字符,因为它很难被发现且容易中断。

关于windows - 通过变量执行cmdlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47483053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com