使用 SQL IaaS 代理扩展在 Azure 中注册多个 SQL VM

Azure VM 上的SQL Server

本文介绍如何使用 SQL IaaS 代理扩展Register-SqlVMsAzure PowerShell cmdlet,通过 Azure 批量地注册 SQL Server 虚拟机(VM)。

或者,可以自动注册所有的 SQL Server VM,或手动注册单个 SQL Server VM

注释

SQL Server 在2022年10月之后通过 Azure 市场部署的虚拟机默认启用了 最小特权模型。 SQL IaaS 代理扩展的管理模式已于 2023 年 3 月移除。

概述

Register-SqlVMs cmdlet 可用于注册给定订阅、资源组或特定虚拟机列表中的所有虚拟机。 cmdlet 将注册虚拟机,然后生成报告和日志文件

注册过程没有风险,没有停机,也不会重启SQL Server服务或虚拟机。

默认情况下,Azure SQL SERVER 2016 或更高版本的 VM 在 CEIP 服务检测到时自动向 SQL IaaS 代理扩展注册。 可以使用批量注册来注册 CEIP 服务未检测到的任何SQL Server VM。

有关隐私的信息,请参阅 SQL IaaS 代理扩展隐私声明

先决条件

若要将SQL Server VM 注册到该扩展,需要以下各项:

开始

在继续操作之前,必须先创建脚本的本地副本,将其导入为 PowerShell 模块,然后连接到Azure。

创建脚本

要创建脚本,请复制本文末尾处的完整脚本并将其作为 RegisterSqlVMs.psm1 保存在本地。

导入脚本

创建脚本后,可以将它作为模块导入 PowerShell 终端。

打开管理 PowerShell 终端并导航到保存 RegisterSqlVMs.psm1 文件的位置。 然后,运行以下 PowerShell cmdlet,将脚本作为模块导入:

Import-Module .\RegisterSqlVMs.psm1

连接到Azure

使用以下 PowerShell cmdlet 连接到Azure:

Connect-AzAccount -Environment AzureChinaCloud

订阅列表中的所有虚拟机

使用以下 cmdlet 在订阅列表中注册所有SQL Server虚拟机:

Register-SqlVMs -SubscriptionList SubscriptionId1,SubscriptionId2

示例输出:

Number of subscriptions registration failed for 
because you do not have access or credentials are wrong: 1
Total VMs Found: 10
VMs Already registered: 1
Number of VMs registered successfully: 4
Number of VMs failed to register due to error: 1
Number of VMs skipped as VM or the guest agent on VM is not running: 3
Number of VMs skipped as they are not running SQL Server On Windows: 1

Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log

单个订阅中的所有 VM

使用以下 cmdlet 在单个订阅中注册所有SQL Server虚拟机:

Register-SqlVMs -Subscription SubscriptionId1

示例输出:

Total VMs Found: 10
VMs Already registered: 1
Number of VMs registered successfully: 5
Number of VMs failed to register due to error: 1
Number of VMs skipped as VM or the  guest agent on VM is not running: 2
Number of VMs skipped as they are not running SQL Server On Windows: 1

Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log

多个资源组中的所有 VM

使用以下 cmdlet 在单个订阅中的多个资源组中注册所有SQL Server虚拟机:

Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupList ResourceGroup1,ResourceGroup2

示例输出:

Total VMs Found: 4
VMs Already registered: 1
Number of VMs registered successfully: 1
Number of VMs failed to register due to error: 1
Number of VMs skipped as they are not running SQL Server On Windows: 1

Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log

一个资源组中的所有 VM

使用以下 cmdlet 在单个资源组中注册所有SQL Server虚拟机:

Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupName ResourceGroup1

示例输出:

Total VMs Found: 4
VMs Already registered: 1
Number of VMs registered successfully: 1
Number of VMs failed to register due to error: 1
Number of VMs skipped as VM or the guest agent on VM is not running: 1

Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log

单个资源组中的特定 VM

使用以下 cmdlet 在单个资源组中注册特定的SQL Server虚拟机:

Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupName ResourceGroup1 -VmList VM1,VM2,VM3

示例输出:

Total VMs Found: 3
VMs Already registered: 0
Number of VMs registered successfully: 1
Number of VMs skipped as VM or the guest agent on VM is not running: 1
Number of VMs skipped as they are not running SQL Server On Windows: 1

Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log

特定 VM

使用以下 cmdlet 注册特定的SQL Server虚拟机:

Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupName ResourceGroup1 -Name VM1

示例输出:

Total VMs Found: 1
VMs Already registered: 0
Number of VMs registered successfully: 1

Please find the detailed report in  file RegisterSqlVMScriptReport1571314821.txt

输出说明

每次使用 Register-SqlVMs cmdlet 时都会生成报表和日志文件。

报表

生成的报表是一个名为 .txtRegisterSqlVMScriptReport<Timestamp>.txt 文件,其中时间戳是启动 cmdlet 的时间。 报表列出了以下详细信息:

输出值 说明
由于你没有访问权限或凭据不正确而导致的订阅注册失败的次数 这提供了与提供的身份验证有问题的订阅的数量和列表。 通过搜索订阅 ID,可以在日志中找到详细的错误。
由于订阅未注册到资源提供程序而无法尝试的订阅数 本节包含尚未注册到 SQL IaaS 代理程序扩展的订阅的数量和列表。
找到的 VM 总数 传递给 cmdlet 的参数范围内识别的虚拟机数量。
已注册的 VM 数 由于虚拟机已注册到代理扩展而跳过的虚拟机的计数。
已成功注册的 VM 数 运行 cmdlet 后成功注册的虚拟机计数。 以 SubscriptionID, Resource Group, Virtual Machine 格式列出已注册的虚拟机。
由于错误而未能注册的 VM 数 由于某些错误而未能注册的虚拟机计数。 可在日志文件中查看错误的详细信息。
由于 VM 或 VM 上的来宾代理未运行而跳过的 VM 数 由于虚拟机或虚拟机上的来宾代理未运行而无法注册的虚拟机的计数和列表。 启动虚拟机或来宾代理后,可以重试这些程序。 可在日志文件中查看详细信息。
跳过的虚拟机数量,因为它们未在 Windows 上运行 SQL Server 由于虚拟机未运行SQL Server或不是Windows虚拟机而跳过的虚拟机计数。 虚拟机以 SubscriptionID, Resource Group, Virtual Machine 格式列出。

日志

错误记录在名为 VMsNotRegisteredDueToError<Timestamp>.log 的日志文件中,其中时间戳是脚本启动的时间。 如果错误位于订阅级别,则日志包含逗号分隔的订阅 ID 和错误消息。 如果错误与虚拟机注册有关,则日志将包含订阅 ID、资源组名称、虚拟机名称、错误代码和消息,用逗号分隔。

备注

使用提供的脚本向扩展注册SQL Server VM 时,请考虑以下事项:

  • 要使用扩展注册,需要在 SQL Server VM 上运行的来宾代理。 Windows Server 2008 映像没有来宾代理,因此这些虚拟机将失败,并且必须手动注册并具有 限制功能
  • 可使用内置重试逻辑来克服透明错误。 如果虚拟机已成功注册,则它是一种快速操作。 但是,如果注册失败,则将重试每个虚拟机。 因此,虽然实际时间要求取决于错误的类型和数量,但你应留出大量时间来完成注册过程。

完整脚本

完整脚本在 GitHub 上,请参阅 使用 Az PowerShell 批量注册 SQL Server VM

复制完整脚本,并将其另存为 RegisterSqLVMs.psm1

后续步骤

若要了解详细信息,请查看以下文章: