powershell azure automation azure-sql-database azure-automation

powershell - ¿Cómo ejecutar el procedimiento almacenado utilizando Azure Automation?



azure-sql-database azure-automation (2)

Soy realmente nuevo en la plataforma Azure y tal vez esta es una pregunta tonta, pero no he logrado encontrar información sobre este tema. Realmente necesito ayuda con esto. Estoy implementando una base de datos utilizada por un servicio web para un proyecto universitario. En esta base de datos tengo un procedimiento almacenado y necesito ejecutarlo a diario.

Encontré que con Azure Automation podía programar o programar este tipo de acciones. "Instalé" el servicio y estoy tratando de crear el "runbook", pero no sé cómo ni qué codificar aquí porque nunca usé PowerShell tanto.

Cualquier ayuda proporcionada será apreciada. ¡Gracias por adelantado!

EDIT 1:

Así que estoy tratando de usar este código para hacer la magia:

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

El caso es que cuando guardo el RunBook y lo publico, dice que no hay errores. Cuando ejecuto el RunBook, comienza y termina sin enviar errores ni excepciones, por lo que podría esperar que hiciera bien el trabajo, pero al consultar la base de datos no hay modificaciones en las tablas que el procedimiento intenta modificar. ¿Cuál podría ser el error en esto? ¿Qué estoy haciendo mal?

Tomé el código de referencia de https://gallery.technet.microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2#content , lo personalicé y eliminé el "param" porque el RunBook cuando comencé, nunca solicité ningún parámetro de entrada, así que decidí ir con la cadena de conexión completa. Estoy usando la misma cadena de conexión que mi proyecto c #, que se conecta y funciona perfectamente.

Estoy usando la "nueva" interfaz azul, no sé si esto podría ser de importancia en este sentido.

Nuevamente, gracias por cualquier ayuda que pueda brindar.



Encontré el núcleo del problema, el código funciona bien, el problema era que estaba usando el tipo incorrecto de RunBook dentro de Azure Automation, así que asegúrese de que está ejecutando un PowerShell de Workflow en lugar de un PowerShell simple.

El código que publiqué en la pregunta funciona, pero encontré una manera mejor de entender lo que hizo el código al usar el ejemplo provisto aquí: https://azure.microsoft.com/en-us/blog/azure-automation-your- sql-agent-in-the-cloud / (gracias a @Joseph Idziorek)

Aquí está el código de trabajo para cualquier persona que se encontró con el mismo problema que yo:

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

Los Write-outputs son opcionales, si desea verificar qué parte del código está funcionando y si todo funcionó después de cada ejecución.