9

我對Azure平臺真的很陌生,也許這是一個愚蠢的問題,但我沒有設法找到有關此主題的信息。我真的需要幫助。我正在部署一個Web服務用於大學項目的數據庫。在這個數據庫中,我有一個存儲過程,需要每天運行它。如何使用Azure自動化運行存儲過程?

發現使用Azure Automation可以編程或安排這種操作。我「安裝」了服務,我正在嘗試創建「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() 
    } 
} 

的事情是,當我保存的運行手冊和發佈它,它說,沒有錯誤。當我運行RunBook時,它會啓動並完成發送任何錯誤和異常,因此您可以期望它做到了正確的工作,但是在諮詢數據庫時,程序無意修改表中的任何修改。這可能是什麼錯誤?我究竟做錯了什麼?

我從https://gallery.technet.microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2#content獲取參考代碼,將其個性化並擺脫了「param」,因爲RunBook啓動時從未詢問任何入口參數,因此我決定使用完整的連接字符串。我使用與我的C#項目相同的連接字符串,它完美地連接和工作。

我正在使用「新」azure接口,不知道這可能在這方面有什麼重要。

再次感謝您提供任何幫助。

+0

你必須使用$添加:somParam在將InlineScript訪問參數。請參閱https://technet.microsoft.com/en-us/library/jj574197(v=ws.11).aspx。 –

回答

4

我找到了問題的核心,代碼工作得很好,在問題是我在Azure Automation內部使用了錯誤類型的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" 
} 

寫入,輸出是可選的,如果你要檢查什麼代碼的部分工作,如果一切每次運行後的工作。

+2

你應該能夠爲你做以上或有一些小的代碼更改一個簡單的PowerShell腳本來運行該腳本PowerShell的工作流程。包裹在將InlineScript代碼實際上使運行定期的PowerShell cmdlet的那些。如果您正在使用PowerShell腳本Runbook,請刪除InlineScript和Workflow,它應該可以正常工作。像普通的PowerShell一樣運行應該是首選的方式,因爲你的腳本不需要編譯就可以更快地啓動。 –

+0

非常感謝您的建議。我會盡量按照你的說法使用它,我真的很喜歡PowerShell。 –

+0

@ElizabethCooper你的線路'如果你正在使用PowerShell腳本Runbook,刪除InlineScript和Workflow,它應該可以工作,這對我來說很重要。無法在官方文檔網站上找到它。或者在閱讀時錯過了它。我有工作流程和內聯,並且無法獲得寫入輸出「hello world」的工作。沒有工作流程和內聯腳本並在本地工作。這解釋了原因。謝謝!我已提高您的評論。 –