powershell - 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 连接到实例我可以确认勾选了允许远程连接框。
解决方案
您可以使用最新的 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'
}
}
希望这可以帮助。
推荐阅读
- java - 使用 Eclipse 在 Java 中泄漏 Scanner 类的实例
- javascript - 未捕获的不变违规:目标容器不是 DOM 元素。- Reactjs
- sql - 如果尚未执行插入,则不想执行更新
- themes - 如何在 RStudio 的主题中包含选择器?
- authentication - 在 git2-rs 中,克隆时如何进行身份验证?
- java - 如何重试 Spring WebClient 以根据响应重试操作?
- vuejs2 - 在 Vue.js 中从 API 延迟加载数据
- php - php命中计数器显示背靠背命中
- android - 将点击监听器附加到回收器视图项的每个组件
- blender - Blender 2.8 视频编辑视频变暗