将凭据传递给函数 Azure Powershell 的问题

Issues passing credentials to a function Azure Powershell

大家好我正在尝试将服务器登录凭据传递给我的'createSQLServer 函数,但一直出现错误'Cannot process argument transformation on parameter 'creds'.userName''我尝试了很多不同的方法,甚至尝试了'param block' 但是仍然卡住了。向正确的方向推动将不胜感激,干杯。

###### SQL SERVER LOGIN CREDENTIALS
$userName = "aaron"
$password = "Password_1234" 
$securePassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $userName, $securePassword

### SQL server names with resource group name appeneded
$server1 = "sqlserver1" + $resGroup
$serVerion = "12.0"

function createSQLserver ([string]$server1,[string]$server2, [string]$server3, [System.Management.Automation.PSCredential]$creds,[string]$server1Location, [string]$server2Location, [string]$server3Location, [string]$resGroup, [string]$serVerion, [string]$userName, [string]$password, [SecureString]$securePassword)
  {
       #Create server 1(Server A)
    <#check to see if server exists - It exists, $continue is created and passed to
    if statement to append two random characters to name#>
    Write-Host "Creating First SQL Server"

      $sqlServer = New-AzureRmSqlServer -ServerName $server1 -SqlAdministratorCredentials $creds -Location $server1Location -ResourceGroupName $resGroup -ServerVersion $serVerion -ErrorVariable continue -ErrorAction SilentlyContinue

    if ($continue)
    {
     do {
         $server1 = $server1 + (rand)
       $sqlServer = New-AzureRmSqlServer -ServerName $server1 `
     -SqlAdministratorCredentials $creds -Location $server1Location `
     -ResourceGroupName $resGroup -ServerVersion "12.0" -ErrorVariable continue -ErrorAction SilentlyContinue
      }
      until(!$continue)

     Write-Host 'exists creating new' $server1 'Created'
    }else{
    Write-Host $server1 ' Created'
    }
      Start-Sleep -s 2
  }


  createSQLserver $server1 $username $password $securePassword $creds $server1Location $resGroup $serVerion

您需要使用您的命名参数!

这是您的前几个参数的片段:

...
[string]$server1
,
[string]$server2
,
[string]$server3
,
[System.Management.Automation.PSCredential]$creds
...

然后是您传递给函数调用的那些

createSQLserver $server1 $username $password $securePassword ...

因此,因为您没有使用参数的 names,它们使用的是它们的相对顺序位置,即

param    | value
---------+----------------
$server1 | $server1
$server2 | $username
$server3 | $password
$creds   | $securePassword

那么我们学到了什么?

始终使用命名参数!

createSQLserver -server1 $server1 -username $username -password $password -securePassword $securePassword

那应该可以解决你的问题 :-)