RunBook автоматизации Azure из другого RunBook - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть имя Runbook "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)
}

Runbook "RB_Daily_Transaction_Summary_Record" предположим, чтобы вызывать "RB_ConnectSQL"обязательный параметр, чтобы выполнить процедуру сохранения в Azure SQL Server.Однако я получаю сообщение об ошибке

В строке: 78 символов: 17 + -SqlServer 'blahblah.database.windows.net' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Не удается найти команду '-SqlServer'.Если эта команда определена как рабочий процесс, убедитесь, что она определена до рабочего процесса, который ее вызывает.Если это команда, предназначенная для запуска непосредственно в Windows PowerShell (или недоступная в этой системе), поместите ее в InlineScript: 'InlineScript {-SqlServer}'

Возможно, я знаю, есть лиошибку, которую я делаю на Runbook?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Если вы хотите разделить команду на несколько строк, добавьте 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)
}
0 голосов
/ 16 декабря 2018

Я обнаружил, что проблема заключалась в том, что я отделяю свой код, чтобы читаемость стала

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)
}

Тогда ошибка ушла и она хорошо работает!

...