从另一个调用一个Azure自动化Runbook时出错

时间:2017-05-16 16:28:02

标签: powershell azure azure-powershell azure-automation

背景

我有一个Azure Runbook(名为WiiWiiWiiWiiNintendo GameCubeNintendo GameCubeNintendo GameCubeNintendo GameCube )定义如下:

RunStoredProcedure2

我现在正尝试使用此命令从另一个Azure Runbook中调用此Runbook:

param(
[parameter(Mandatory=$True)]
[string] $SqlServer,

[parameter(Mandatory=$False)]
[int] $SqlServerPort = 1433,

[parameter(Mandatory=$True)]
[string] $Database,

[parameter(Mandatory=$True)]
[string] $StoredProcedureName,

[parameter(Mandatory=$True)]
[PSCredential] $SqlCredential
)

# Get the username and password from the SQL Credential
$SqlUsername = $SqlCredential.UserName
$SqlPass = $SqlCredential.GetNetworkCredential().Password

$Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$SqlServer,$SqlServerPort;Database=$Database;User ID=$SqlUsername;Password=$SqlPass;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;")

$Conn.Open()

$Cmd=new-object system.Data.SqlClient.SqlCommand("EXEC 
$StoredProcedureName", $Conn)
$Cmd.CommandTimeout=120


$Cmd.ExecuteNonQuery()
# Close the SQL connection
$Conn.Close()

问题

当我尝试运行时,我收到此错误:

  

C:\ Temp \ uzahthmc.su1 \ RunStoredProcedure2.ps1:无法处理参数'SqlCredential'上的参数转换。一个   由于主机程序或命令类型不支持用户交互,因此提示用户失败的命令。   主持人尝试使用以下消息请求确认:输入您的凭据。

我能够成功运行& .\RunStoredProcedure2.ps1 -Database 'adventureworksnh.database.windows.net' -SqlServer 'AdventureWorksDW' -SqlServerPort 1433 -StoredProcedureName 'TestJob1' -sqlCredential 'awadmin' 这些参数

我尝试过什么

  • 添加/删除前面的&符号
  • 使用Invoke-Expression

1 个答案:

答案 0 :(得分:2)

您是否拥有名为" awadmin"的凭据资产?在您的自动化帐户?直接启动Runbook(使用门户中的“开始”按钮或Start-AzureRmAutomationRunbook)时,Azure自动化允许您将凭据资产名称作为参数值传递,它将自动检索指定的凭据。但是,当您从另一个Runbook 调用Runbook 时,您必须遵循普通的PowerShell规则并传递PSCredential对象,如声明:

$sqlCred = Get-AutomationPSCredential -Name 'awadmin'
& .\RunStoredProcedure2.ps1 ... -sqlCredential $sqlCred