关于 cmdlet 'Get-AzKeyVaultSecret' SecretValueText 中的重大更改的警告已弃用 Az4.6.1

Neg*_*tar 14 azure azure-powershell

我今天将 Az Powershell 升级到 4.6.1 并开始看到以下警告。我的问题是我应该如何处理这个警告?我可以将警告静音,但这根本无法帮助我为这一重大变化做好准备。我检查了 Az 4.6.1 Microsoft 文档,他们告诉我我应该仍然使用 SecretValueText 并且没有提供关于弃用或任何其他获取秘密值的替代方法的类似警告。那么我使用 SecretValueText 读取 KeyVault 机密的 powershell 的更新路径是什么?

WARNING: Breaking changes in the cmdlet 'Get-AzKeyVaultSecret' :
WARNING:  - "The output type 'Microsoft.Azure.Commands.KeyVault.Models.PSKeyVaultSecret' is changing" 
- The following properties in the output type are being deprecated :
 'SecretValueText'
WARNING: Note :The change is expected to take effect from the version :  '3.0.0'
WARNING:  - "The output type 'Microsoft.Azure.Commands.KeyVault.Models.PSDeletedKeyVaultSecret' is changing"
 - The following properties in the output type are being deprecated :
 'SecretValueText'
WARNING: Note :The change is expected to take effect from the version :  '3.0.0'
WARNING: NOTE : Go to https://aka.ms/azps-changewarnings for steps to suppress this breaking change warning, and other information on breaking changes in Azure PowerShell.
Run Code Online (Sandbox Code Playgroud)

这是Microsoft 文档中的当前示例:

$secret = Get-AzKeyVaultSecret -VaultName 'Contoso' -Name 'ITSecret'
Write-Host "Secret Value is:" $secret.SecretValueText

Secret Value is: P@ssw0rd
Run Code Online (Sandbox Code Playgroud)

小智 15

这可以通过以下方式完成:

获取秘密:

$secret = Get-AzKeyVaultSecret -VaultName {YourVaultName} -Name {YourSecret}
$pass = $secret.SecretValue | ConvertFrom-SecureString -AsPlainText
Run Code Online (Sandbox Code Playgroud)

这与 $secret.SecretValueText 相同


小智 10

Microsoft 文档现已更新此示例取自最新文档

$secret = Get-AzKeyVaultSecret -VaultName 'Contoso' -Name 'ITSecret'
$secretValueText = '';
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
    $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
    [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Host "Secret Value is:" $secretValueText

Secret Value is: P@ssw0rd
Run Code Online (Sandbox Code Playgroud)

  • 想知道为什么他们不将这些 .net 调用捆绑到现有的 SecretValueText 方法中。这本来可以避免重大更改并保留简单的语法。 (2认同)

Joy*_*ang 7

好吧,即使SecretValueText将被弃用,也有一种方法将始终有效。

使用就行$secret.SecretValue,它是一个System.Security.SecureString,我们只需要把它转换成String$Password下面就是你想要的。

$secret = Get-AzKeyVaultSecret -VaultName joykeyvault -Name mySecret123
$SecurePassword = $secret.SecretValue
$Password = [System.Net.NetworkCredential]::new("", $SecurePassword).Password
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Man*_*ele 5

PowerShell 7 支持 ConvertFrom-SecureString -AsPlainText。请勿在较低版本上尝试