Powershell脚本需要帮助

问题描述

我正在尝试执行在以下位置找到的powershell脚本:

https://github.com/amanbedi18/Azure-KeyVault-Automation/tree/master/UploadSecrets

https://github.com/amanbedi18/Azure-KeyVault-Automation

此脚本用于自动将机密上传到天蓝色的密钥库。

我创建了以下json文件并将其命名为 /user/kv/AzureSecretsMetaData.json

[
{
    "key":  "test1","value":  "1"
},{
    "key":  "test2","value":  "2"
}
]

然后我将setkeyvaultSecrets.ps1的内容复制到 /user/kv/setkeyvaultSecrets.ps1

我尝试了自述文件和powershell脚本文件中提到的以下命令,并得到以下错误,有人可以帮助我正确执行此脚本,并指出我在这里做错了什么。

./ setkeyvaultSecret.ps1 -keyvaultName'avkv01'

setkeyvaultSecret.ps1: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.

./ setkeyvaultSecret.ps1 -keyvaultName'avkv01'-KVSecretMetadataFilePath'/home/aditya/kv/AzureSecretsMetaData.json'

setkeyvaultSecret.ps1: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.

任何帮助将不胜感激。谢谢

解决方法

如果您找到了这些脚本,则它们的书写效果很差,我建议您不要使用它们。我建议安装az powershell模块并使用这些脚本作为编写自己的脚本的参考。您可以使用powershellget安装az powershell模块:

Install-module az -force -allowclobber

您尝试调用的脚本的编写方式非常奇怪。它定义了两个不同的参数集,但是两个参数中的每个参数对于两个参数集都是必需的?那没有什么意义。如果必须运行它们,则可能需要对其进行一些修改。他们似乎还没有真正完成。为什么不修改脚本并完全摆脱参数集?此外,脚本中的示例表明“ $ KVSecretMetadataFilePath”参数不是必需的,因为未调用它,但是在定义参数时被定义为必需的。您需要明确是否需要此参数。如果需要,请使其看起来像这样:

    <#

.PREREQUISITE
1. An Azure key vault and its name as parameter.
2. Json template should be properly populated with valid json schema in sampleSecretValues.json in KeyVaultjson directory.

.PARAMETER vaultName
The name of the key vault.

.EXAMPLE
. setKeyVaultSecret.ps1 -KeyVaultName 'somekeyvault'
#>

# provision keys and secrets to a key vault 

Param(
    [Parameter(Mandatory=$true)]
    [String]
    $KeyVaultName,[Parameter(Mandatory=$true)]
    [String]
    $KVSecretMetadataFilePath
)

Install-Module -Name AzureADPreview -ErrorAction SilentlyContinue -Force 
Import-Module Azure -ErrorAction SilentlyContinue
Import-Module AzureRM.Resources

Set-StrictMode -Version 3

$json = Get-Content $KVSecretMetadataFilePath | Out-String | ConvertFrom-Json

$json | ForEach {

$secretToSearch = Get-AzureKeyVaultSecret -VaultName $KeyVaultName -Name $_.key -ErrorAction SilentlyContinue

if($secretToSearch -ne $null)
{
    echo "The secret $_.key already exists !"
}
Else
{
    $NewSecret = Set-AzureKeyVaultSecret -VaultName $KeyVaultName -Name $_.key -SecretValue (ConvertTo-SecureString $_.value -AsPlainText -Force ) -Verbose
    Write-Host
    Write-Host "Source Vault Resource Id: "$(Get-AzureRmKeyVault -VaultName $KeyVaultName).ResourceId
}
}

如果不需要,请删除$ KVSecretMetadataFilePath声明上方的“ [Parameter(Mandatory = $ true)]”行。