首页 > 解决方案 > Runbook Powershell Invoke-Sqlcmd SQL Server MI 连接

问题描述

我有一些 Powershell 代码可以在我想通过 Azure 自动化安排的 SQL Server 托管实例上删除数据库。该代码在 Windows Powershell ISE 中运行良好。

#Type the Managed instance admin login
$username =  "uname"
#Type the Managed instance admin password
$password =  'pwd'
#Type the Full Managed instance name
$managedInstance =  "sql-srvr_mangedinstance.database.windows.net"
#Leave this parameter as is
$database =  "master"
#Drop Database before restore
Invoke-Sqlcmd -ServerInstance $managedInstance -Database $database -Username $username -Password $password -Query "DROP DATABASE [DB_NAME]"
Write "Dropped Database DB_NAME"

不幸的是,当我通过 Azure 上的 Runbook 运行它时,它给了我这个错误。

Invoke-Sqlcmd:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP Provider,错误:0 - 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。)在 line:32 char:1 + Invoke -Sqlcmd -ServerInstance $managedInstance -Database $database -U ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException + FullyQualifiedErrorId:SqlExceptionError,Microsoft.SqlServer.Management.PowerShell。

我已经通过将服务器连接更改为“Server=tcp:managedinstancename.database.windows.net:1433”来解决此问题,但这似乎更倾向于 vm 上的 Sql Server DB。我还在代码顶部包含了 Import-Module Sqlserver 命令,即使该模块已经在运行手册模块刀片中。使用 SSMS 连接到实例我可以确认勾选了允许远程连接框。

标签: powershellazure-automationazure-runbookazure-sql-managed-instance

解决方案


您可以使用最新的 Azure Rm SQL 命令行开关并删除数据库。

   # Get the current context of the account which can perform operations on the database server
    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
    Set-AzureRmContext -SubscriptionId $conn.SubscriptionId -ErrorAction Stop | Write-Verbose

    # assign resourcegroup, database server and database names
    $rgname = "rgname"
    $dbservername = "servername"
    $dbname = "dbname"

    if(Get-AzureRmSqlDatabase -ResourceGroupName $rgname -ServerName $dbservername -DatabaseName $dbname)
        {
        Try{
            Remove-AzureRmSqlDatabase -ResourceGroupName $rgname -ServerName $dbservername -DatabaseName $dbname -Force
            Write-Output "Dropped Database $database"
        }Catch{
            $errorMessage = $_.Exception.Message
            Write-Output $errorMessage
            Write-Output 'Failed to delete database'
        }
    }

希望这可以帮助。


推荐阅读