如何使用Azure自动化运行存储过程?

Mar*_*isi 10 powershell automation azure azure-automation azure-sql-database

我真的是Azure平台的新手,也许这是一个愚蠢的问题,但我找不到有关这个主题的信息.我真的需要帮助.我正在为大学项目部署Web服务使用的数据库.在这个数据库中,我有一个存储过程,需要每天运行它.

发现使用Azure自动化,您可以编程或安排此类操作.我"安装"了该服务,我正在尝试创建"Runbook",但不知道如何在这里编写代码或代码,因为我从未使用过PowerShell.

任何帮助将不胜感激.提前致谢!

编辑1:

所以我正在尝试使用这段代码来制作魔法:

 workflow WORKFLOW_NAME
{ 
    param( 

    ) 


    inlinescript { 
        # Define the connection to the SQL Database 
        $Conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=SERVER_NAME.database.windows.net;Initial Catalog=DATABASE_NAME;Integrated Security=False;User ID=USERNAME;Password=PASSWORD;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False") 

        # Open the SQL connection 
        $Conn.Open() 

        # Define the SQL command to run. 
        $Cmd=new-object system.Data.SqlClient.SqlCommand("exec PROCEDURE_NAME", $Conn) 
        $Cmd.CommandTimeout=120 

        # Execute the SQL command 
        $Da=New-Object system.Data.SqlClient.SqlDataAdapter($Cmd) 

        # Close the SQL connection 
        $Conn.Close() 
    } 
}
Run Code Online (Sandbox Code Playgroud)

问题在于,当我保存RunBook并发布它时,它表示没有错误.当我运行RunBook时,它启动并完成发送没有错误或异常,所以你可以期望它能正常工作吗?但是在咨询数据库时,程序中没有修改过程.这可能是什么错误?我究竟做错了什么?

我从https://gallery.technet.microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2#content中获取了参考代码,对其进行了个性化并摆脱了"param",因为RunBook何时开始,从未要求任何输入参数,所以我决定使用完整的连接字符串.我使用与我的c#项目相同的连接字符串,它连接并完美地工作.

我正在使用"新"天蓝色界面,不知道这在这方面是否具有任何重要性.

再次感谢您提供的任何帮助.

Mar*_*isi 6

我找到了问题的核心,代码工作正常,问题是我在Azure自动化中使用了错误类型的RunBook,因此,请确保您运行的是Workflow PowerShell而不是简单的PowerShell.

我在问题中发布的代码有效,但我找到了一个更好的方法来理解使用此处提供的示例所做的代码:https://azure.microsoft.com/en-us/blog/azure-automation-your- sql-agent-in-the-cloud /(感谢@Joseph Idziorek)

以下是遇到与我相同问题的任何人的工作代码:

workflow NAME-OF-YOUR-WORKFLOW
{
    Write-Output "JOB START BEFORE INLINESCRIPT"

    inlinescript
    {
        Write-Output "JOB START"
        # Create connection to Master DB
        $MasterDatabaseConnection = New-Object System.Data.SqlClient.SqlConnection
        $MasterDatabaseConnection.ConnectionString = "Data Source=YOUR-DATABASE-SERVER-NAME.database.windows.net;Initial Catalog=YOUR-DATABASE-NAME;Integrated Security=False;User ID=YOUR-DATABASE-USERNAME;Password=YOUR-DATABASE-PASSWORD;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False"
        $MasterDatabaseConnection.Open()

        Write-Output "CONNECTION OPEN"

        # Create command
        $MasterDatabaseCommand = New-Object System.Data.SqlClient.SqlCommand
        $MasterDatabaseCommand.Connection = $MasterDatabaseConnection
        $MasterDatabaseCommand.CommandText = "YOUR-PROCEDURE-NAME"

        Write-Output "DATABASE COMMAND TEXT ASSIGNED"

        # Execute the query
        $MasterDatabaseCommand.ExecuteNonQuery()

        Write-Output "EXECUTING QUERY"

        # Close connection to Master DB
        $MasterDatabaseConnection.Close() 

        Write-Output "CONNECTION CLOSED"
    }    
    Write-Output "WORK END - AFTER INLINESCRIPT"
}
Run Code Online (Sandbox Code Playgroud)

如果要检查代码的哪个部分正在工作以及每次运行后是否一切正常,则写输出是可选的.

  • 您应该可以像上面那样将此脚本作为PowerShell Workflow运行,也可以作为简单的PowerShell脚本运行,并进行一些次要的代码更改.在inlinescript中包装代码实际上会使这些cmdlet作为常规PowerShell运行.如果您使用的是PowerShell脚本Runbook,请删除InlineScript和工作流,它应该可以正常工作.作为常规PowerShell运行实际上应该是首选方式,因为脚本将更快启动,因为它们不需要编译. (2认同)