【问题标题】:Azure Automation RunBook from Another RunBook来自另一个 RunBook 的 Azure 自动化 RunBook
【发布时间】:2019-05-17 00:08:00
【问题描述】:

我有一个运行手册名称“RB_ConnectSQL”

workflow RB_ConnectSQL
{
    [OutputType([string])]
     param
     (
        [Parameter(Mandatory=$true)] [string] $SqlServer,
        [Parameter(Mandatory=$false)] [int] $SqlServerPort = 1433,
        [Parameter(Mandatory=$true)] [string] $Database,
        [Parameter(Mandatory=$true)] [string] $Procedure,
        [Parameter(Mandatory=$true)] [string] $SqlCredentialName
     )
    $SqlCredential = Get-AutomationPSCredential -Name $SqlCredentialName
    $SqlUsername = $SqlCredential.UserName
    $SqlPass = $SqlCredential.GetNetworkCredential().Password

     inlinescript
     {
         $haveError = 0
         $DatabaseConnection = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$using:SqlServer,$using:SqlServerPort; Database=$using:Database; User ID=$using:SqlUsername;Password=$using:SqlPass; Trusted_Connection=False; Encrypt=True; Connect Timeout=7200;") 

         $outputDataTable = New-Object System.Data.DataTable
            [string[]] $ColumnNames
             try
             {
                $DatabaseConnection.Open()
                $Cmd=new-object system.Data.SqlClient.SqlCommand
                $Cmd.Connection = $DatabaseConnection
                $Cmd.CommandText = 'EXEC ' + $using:Procedure + ';'
                $Cmd.CommandTimeout = 7200
                $sqlDataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd
                $dataSet = New-Object System.Data.DataSet
                Write-Output($Cmd.CommandText)
                $sqlDataAdapter.Fill($dataSet) | out-null
                if ($dataSet.Tables[0].Rows.Count -gt 0)
                {
                    $outputDataTable = $dataSet.Tables[0]
                }
                else
                {
                    $outputDataTable = "SQL Stroc Proc Executed”
                }
             }
            catch
            {
                 #write your own error handling code here.
                 #if required send error message in email.                
            }
             finally
            {
                 if ($Cmd -ne $null)
                 {
                    $Cmd.Dispose
                 }

                 $DatabaseConnection.Close()
                 $DatabaseConnection.Dispose()
            }
        }
    }

还有另一个 Runnbook 名称“RB_Daily_Transaction_Summary_Record”

workflow RB_Daily_Transaction_Summary_Record
{
    $dataTable = RB_ConnectSQL -SqlServer 'blahblah.database.windows.net' -Database 'blahDev' -Procedure 'sp_Daily_Transaction_Summary_Record' -SqlCredentialName 'blahCredential'    
    Write-Output($dataTable)
}

运行手册“RB_Daily_Transaction_Summary_Record”假设调用“RB_ConnectSQL”并传入所需的参数,以便在 Azure SQL Server 中执行存储过程。 但是我得到了错误

在 line:78 char:17 + -SqlServer 'blahblah.database.windows.net' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 找不到'-SqlServer ' 命令。如果此命令被定义为工作流,请确保在调用它的工作流之前定义它。如果它是旨在直接在 Windows PowerShell 中运行的命令(或在此系统上不可用),请将其放在 InlineScript 中:'InlineScript { -SqlServer }'

我可以知道我在运行手册上有什么错误吗?

【问题讨论】:

    标签: azure powershell azure-sql-database azure-automation azure-runbook


    【解决方案1】:

    如果要将一个命令分成多行,请在每行末尾添加white-space and backquote,最后一行除外。

    在您的情况下,它应该使用以下格式:

    workflow RB_Daily_Transaction_Summary_Record
    {
        $dataTable = RB_ConnectSQL
                     -SqlServer 'blahblah.database.windows.net' `
                     -Database 'blahDev' `
                     -Procedure 'sp_Daily_Transaction_Summary_Record' `
                     -SqlCredentialName 'blahCredential'    
        Write-Output($dataTable)
    }
    

    【讨论】:

      【解决方案2】:

      我发现问题在于我将代码分开以提高可读性

      workflow RB_Daily_Transaction_Summary_Record
      {
          $dataTable = RB_ConnectSQL
                       -SqlServer 'blahblah.database.windows.net'
                       -Database 'blahDev'
                       -Procedure 'sp_Daily_Transaction_Summary_Record'
                       -SqlCredentialName 'blahCredential'    
          Write-Output($dataTable)
      }
      

      但新行似乎破坏了代码。

      我改写为:

      workflow RB_Daily_Transaction_Summary_Record
      {
          $dataTable = RB_ConnectSQL -SqlServer 'blahblah.database.windows.net' -Database 'blahDev' -Procedure 'sp_Daily_Transaction_Summary_Record' -SqlCredentialName 'blahCredential'    
          Write-Output($dataTable)
      }
      

      然后错误消失了,它运行良好!

      【讨论】:

      • 当你分开你的powershell代码时,你应该在每一行的末尾使用反引号(这个符号`)。
      • @IvanYang 这是否意味着我需要在每行末尾添加反引号?
      • 是的,试试你以前的脚本:),除了最后一行: -SqlCredentialName 'blahCredential' 。有任何问题请告诉我。
      • @IvanYang 是的,谢谢。
      猜你喜欢
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2019-05-18
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2020-07-26
      相关资源
      最近更新 更多