如何在Powershell Azure函数2.x中使用Get-AzKeyVaultSecret

如何在Powershell Azure函数2.x中使用Get-AzKeyVaultSecret,powershell,azure-functions,azure-keyvault,Powershell,Azure Functions,Azure Keyvault,我正在设置Powershell Azure函数,该函数需要Azure KeyVault中的密钥。大多数密钥可以使用@Microsoft.KeyVault(SecretUri='MySecretUriWithVersion')方法检索 其中一个键经常变化。因此无法使用SecretUri 所有钥匙都存储在同一个钥匙库中,该功能具有一个MSI,可以读取、列出和更改所有钥匙 我正在使用需要更新的刷新令牌。每次运行代码时都会更新此值,并且需要在keyvault中更新此值 连接AzaAccount-标识 #

我正在设置Powershell Azure函数,该函数需要Azure KeyVault中的密钥。大多数密钥可以使用@Microsoft.KeyVault(SecretUri='MySecretUriWithVersion')方法检索

其中一个键经常变化。因此无法使用SecretUri

所有钥匙都存储在同一个钥匙库中,该功能具有一个MSI,可以读取、列出和更改所有钥匙

我正在使用需要更新的刷新令牌。每次运行代码时都会更新此值,并且需要在keyvault中更新此值

连接AzaAccount-标识
#工作
获取AzKeyVault-VaultName$VaultName-ResourceGroupName$rgName
#不起作用
获取AzKeyVaultSecret-VaultName$VaultName-Name$KeyName
预期输出:代码检索密钥

实际输出:错误:操作返回无效的状态代码 “未经授权”Microsoft.Azure.WebJobs.Script.Rpc.rpceException: 结果:错误:操作返回无效的状态代码 “未经授权”异常:操作返回了无效的状态代码 “未经授权”堆栈:位于 Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretWithHttpMessageAsync(字符串 Vault BaseURL、字符串secretName、字符串secretVersion、字典`2 customHeaders,CancellationToken CancellationToken) dlet.ProcessRecord()

摘自微软:

你试过用点符号来检索那些键吗

(Get-AzKeyVaultSecret -vaultName $VaultName -name $KeyName).SecretValueText
如果这不起作用,您可以查看有关ManagedAppServices的github问题:


似乎与您遇到的问题相同。

此外,如果您因
secretValueText
被弃用而面临任何问题,请参阅此问题。

现在有了一种新的解决方法

$secret = Get-AzKeyVaultSecret -VaultName "<your-unique-keyvault-name>" -Name "ExamplePassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
  $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
  [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText
$secret=Get-AzKeyVaultSecret-VaultName”“-Name“ExamplePassword”
$ssPtr=[System.Runtime.InteropServices.Marshall]::SecureStringToBSTR($secret.SecretValue)
试一试{
$secretValueText=[System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
}最后{
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
写入输出$secretValueText

请参阅:

原始错误现在已在Azure函数中修复

仍然需要检索密钥库中经常更新的密钥。为此,我使用以下方法:

(Get-AzKeyVaultSecret MyVaultName -Name MySecretName).secretvalue | ConvertFrom-SecureString -AsPlainText

对这就是我面临的问题。感谢您为我指出正确的错误:-)“ConvertFrom SecureString:找不到与参数名称'AsPlainText'匹配的参数”。您使用的是什么版本?Powershell版本:5.1.19041.906