【发布时间】:2018-07-13 21:34:00
【问题描述】:
我正在尝试运行以下 PS 脚本来备份特定 Azure Key Vault 中的所有机密:
$secret = Get-AzureKeyVaultSecret –VaultName 'testkeyvault-1' |
ForEach-Object {
$Name = $_."Name"
Backup-AzureKeyVaultSecret -Secret $Name -OutputFile 'C:\Backup.blob'
}
虽然由于以下 PS 错误而失败,但我们将不胜感激:
Backup-AzureKeyVaultSecret : Cannot bind parameter 'Secret'. Cannot convert the "SQLSecret" value of type "System.String" to type "Microsoft.Azure.Commands.KeyVault.Models.Secret".
At line:4 char:36
+ Backup-AzureKeyVaultSecret -Secret $Name -OutputFile 'C:\Backup.blob'
+ ~~~~~
+ CategoryInfo : InvalidArgument: (:) [Backup- AzureKeyVaultSecret], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Azure.Commands.KeyVault.BackupAzureKeyVaultSecret
【问题讨论】:
-
尝试使用
-Secret $_而不是只分配名称值。 (不熟悉这个功能,所以不确定这是否可行;但错误表明这可能是问题所在)。 -
您好,感谢您的回复,如果我添加 $_ Backup-AzureKeyVaultSecret,它会将参数视为 null:无法验证参数“秘密”的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后尝试该命令
-
有趣;这意味着
$_."Name"也将返回空值(因为在 PS 中空对象的属性本身为空值)......所以我会认为你应该在之前使用$Name时收到同样的错误......除非这不是列表中的第一项。 -
尝试将
ForEach-Object {更改为Where-Object {$_} | ForEach-Object {。即应该过滤掉列表中的任何空值。奇怪的是,任何东西都会被退回;但也许这会有所帮助。除此之外;恐怕我想不出任何其他好的建议...... -
您好,关于 -Secret $_."Name" 我把引号去掉了,包括我现在得到以下输出:
Backup-AzureKeyVaultSecret : Cannot bind parameter 'Secret'. Cannot convert the "TestUsername" value of type "System.String" to type "Microsoft.Azure.Commands.KeyVault.Models.Secret". At line:4 char:36 + Backup-AzureKeyVaultSecret -Secret $_."Name" -OutputFile 'C:\Backup.b ...
标签: azure powershell azure-keyvault