【发布时间】:2022-01-13 15:31:45
【问题描述】:
我正在尝试将机密从一个 Azure Key Vault 复制到另一个。
所以我写了 2 个 Powershell 函数 -
一个用于阅读秘密的:
function GetSecretValue
{
param(
[String] $KeyvaultName,
[String] $SecretName
)
Write-Host "Retrieving secret $SecretName from $KeyvaultName... " -NoNewline
if ((Get-Command Get-AzKeyVaultSecret).ParameterSets.Parameters.Name -contains "AsPlainText")
{
# Newer Get-AzKeyVaultSecret version requires -AsPlainText parameter
$SecretValue = Get-AzKeyVaultSecret -VaultName $KeyvaultName -Name $SecretName -AsPlainText
}
else
{
$SecretValue = (Get-AzKeyVaultSecret -VaultName $KeyvaultName -Name $SecretName).SecretValueText
}
Write-Host "ok"
return $SecretValue
}
还有一个用于创建秘密的:
function SetSecretValue
{
param(
[String] $KeyvaultName,
[String] $SecretName,
[String] $SecretValue
)
Write-Host "Creating secret $SecretName in $KeyvaultName... " -NoNewline
$SecureStr = ConvertTo-SecureString -String $SecretValue -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $keyvaultName -Name $secretName -SecretValue $SecureStr
Write-Host "ok"
}
它们似乎工作正常,但是当我(Powershell 新手)尝试将它们结合起来时 -
SetSecretValue($DestKv, 'ClientId', GetSecretValue($SrcKv, 'ClientId'))
SetSecretValue($DestKv, 'ClientSecret', GetSecretValue($SrcKv, 'ClientSecret'))
然后我得到语法错误:
+ SetSecretValue($DestKv, 'ClientId', GetSecretValue($Src ...
+ ~
Missing closing ')' in expression.
【问题讨论】:
-
在 PowerShell 中,参数列表周围不需要括号,并且单独的参数参数不应使用逗号分隔:
SetSecretValue $DestKv 'ClientId' -SecretValue (GetSecretValue $srcKv 'ClientId')。您可能还想重命名函数以遵循 PowerShell 的Verb-Noun语法(例如Set-SecretValue和Get-SecretValue) -
简而言之:必须调用 PowerShell 函数、cmdlet、脚本和外部程序-
foo('arg1', 'arg2')。如果您使用,分隔参数,您将构造一个命令将其视为单个参数 的数组。为防止意外使用方法语法,请使用Set-StrictMode -Version 2或更高版本,但请注意其其他影响。请参阅this answer 了解更多信息。
标签: azure powershell azure-keyvault