注册信息收集指南:T-SQL 与 PowerShell 脚本实战解析)
示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载SQL Server 进入生命周期终点End of Support后扩展安全更新Extended Security UpdatesESU是继续获得关键安全补丁的重要途径。本文基于 sql-server-samples 仓库的 sql-server-extended-security-updates 模块完整讲解如何用官方示例脚本T-SQL 与 PowerShell自动生成 ESU 注册所需的实例信息清单并深入解析脚本底层的数据采集逻辑帮助你为单实例、单机多实例乃至大规模实例清单的批量注册做好准备。一、ESU 注册信息为什么需要生成器脚本当 SQL Server 版本结束支持后需要将其注册到 Azure 门户的 ESU 管理体系中才能持续接收扩展安全更新。注册时Azure 门户要求提供每个 SQL Server 实例的实例名name、SQL 版本version、版本类型edition、核心数cores和主机类型hostType这些字段会用于 ESU 权益的核算与合规审计。手动为成百上千台服务器逐一填写这些信息既不现实也容易出错。为此仓库在 scripts 目录 提供了三类官方示例脚本分别面向不同的采集场景脚本文件适用场景输出EOS_DataGenerator_SingleInstance.sql单个实例在 SSMS / sqlcmd 中直接执行结果集EOS_DataGenerator_LocalDiscovery.ps1本机所有 SQL Server 实例Azure VM、本地物理机或本地虚拟机CSV 文件EOS_DataGenerator_InputList.ps1文本文件中列出的远程实例清单CSV 文件PowerShell 脚本生成的 CSV 文件可直接用于 Azure 门户的批量注册Bulk Register一次上传完成多台服务器的 ESU 注册。二、T-SQL 方案单实例注册信息采集当只需要采集某一个实例的注册信息时直接在 SSMS 或 sqlcmd 中执行 EOS_DataGenerator_SingleInstance.sql 即可。DECLARE SystemManufacturer NVARCHAR(128), Edition NVARCHAR(20), HostType NVARCHAR(30), Cores int, SQLVersion NVARCHAR(50) DECLARE machineinfo TABLE ([Value] NVARCHAR(256), [Data] NVARCHAR(256)) INSERT INTO machineinfo EXEC xp_instance_regread HKEY_LOCAL_MACHINE,HARDWARE\DESCRIPTION\System\BIOS,SystemManufacturer; SELECT SystemManufacturer [Data] FROM machineinfo WHERE [Value] SystemManufacturer; SET HostType Physical Server IF LOWER(SystemManufacturer) microsoft OR LOWER(SystemManufacturer) vmware SET HostType Virtual Machine SELECT Cores hyperthread_ratio FROM sys.dm_os_sys_info; SELECT Edition CONVERT(NVARCHAR(20), SERVERPROPERTY(Edition)) SELECT SQLVersion CONVERT(NVARCHAR(50), SERVERPROPERTY(ProductVersion)) SELECT SERVERPROPERTY(ServerName) AS [name], CASE LEFT(SQLVersion,4) WHEN 10.0 THEN 2008 WHEN 10.5 THEN 2008R2 WHEN 11.0 THEN 2012 WHEN 12.0 THEN 2014 WHEN 13.0 THEN 2016 WHEN 14.0 THEN 2017 WHEN 15.0 THEN 2019 ELSE Other END AS [version], LEFT(Edition,CHARINDEX( , Edition,0)-1) AS edition, Cores AS cores, HostType AS hostType;脚本逐段原理主机类型判定hostType脚本通过xp_instance_regread读取注册表键HARDWARE\DESCRIPTION\System\BIOS下的SystemManufacturer值用于判断运行环境制造商为microsoft或vmware→Virtual Machine其他情况 →Physical Server。注意xp_instance_regread是 SQL Server 的未文档化系统扩展存储过程它读取的是当前实例所在机器的注册表与xp_regread的本机语义在实例上下文中等价在生产环境使用前应确认你所在组织的安全策略是否允许。核心数采集cores通过sys.dm_os_sys_info动态管理视图获取hyperthread_ratio字段。从源码结构看该字段反映的是操作系统可见的逻辑处理器与物理核心的比率折算结果脚本将其直接作为核心数上报在启用超线程且 BIOS 配置不同的机器上建议核对该值与实际物理核心数是否一致。版本与版本类型映射SERVERPROPERTY(ProductVersion)返回完整产品版本号如15.0.2000.5脚本用LEFT(...,4)截取主版本号映射为业务版本号10.0→2008、10.5→2008R2、11.0→2012、12.0→2014、13.0→2016、14.0→2017、15.0→2019其余归为OtherSERVERPROPERTY(Edition)返回版本类型如Enterprise Edition (64-bit)脚本通过CHARINDEX( , ...)截取第一个空格前的单词作为 edition 值。实例名name使用SERVERPROPERTY(ServerName)返回的格式为机器名\实例名默认实例则为纯机器名与 Azure 门户注册页展示的实例标识一致。注意执行后请务必核对Host Type是否正确尤其当注册表制造商信息被虚拟机模板自定义过时手动判断可能比脚本更可靠。三、PowerShell 方案一本机全实例自动发现LocalDiscovery当一台机器上安装了多个 SQL Server 实例或默认实例 命名实例混布时可使用 EOS_DataGenerator_LocalDiscovery.ps1 一键发现并采集本机全部实例的信息适用于 Azure VM、本地物理服务器和本地虚拟机三种场景。运行方式与交互流程在 PowerShell 中直接执行.\EOS_DataGenerator_LocalDiscovery.ps1脚本运行时会依次交互询问CSV 输出文件名输入文件名自动补.csv后缀文件保存在脚本所在目录留空则抛出Parameter missing: Output file是否为 Azure 虚拟机Y/N回答Y时脚本会继续询问Azure 订阅名称随后自动执行Install-Module -Name Az -AllowClobber -Scope CurrentUser安装/更新 Azure PowerShell 模块、Connect-AzAccount登录并通过Get-AzVM -Name $env:computername获取 VM 信息订阅 ID、资源组、VM 名称、操作系统版本以便在 CSV 中额外输出subscriptionId、resourceGroup、azureVmName、azureVmOS四个 Azure 专属字段回答N时走本地物理机/本地 VM采集逻辑CSV 只包含前 5 个核心字段。底层采集逻辑实例发现通过Get-Service -DisplayName SQL Server (*)枚举所有 SQL Server 相关 Windows 服务服务名中的MSSQL$前缀被移除后拼接为机器名\实例名默认实例MSSQLSERVER退化为纯机器名。实例信息以Trusted_Connectiontrue建立System.Data.SqlClient.SqlConnection执行SELECT SERVERPROPERTY(Edition), SERVERPROPERTY(ProductVersion)获取版本与版本类型CommandTimeout 0表示不限制查询超时。核心数通过 WMI 类Win32_Processor遍历所有物理处理器累加NumberOfCores注意这里统计的是物理核心总数与 T-SQL 方案的hyperthread_ratio口径不同两套脚本对同一机器的 cores 值可能略有差异。主机类型判定优先级依次为——存在subscriptionId→Azure Virtual Machine制造商以Microsoft或VMWare开头 →Virtual Machine否则 →Physical Server。输出格式非 Azure 场景输出列name,version,edition,cores,hostTypeAzure 场景输出列参考仓库示例 MyAzureVMs.csvname,version,edition,cores,hostType,subscriptionId,resourceGroup,azureVmName,azureVmOS脚本使用ConvertTo-Csv -NoTypeInformation生成 CSV并通过% { $_ -Replace , }去除引号包裹得到可直接上传的纯文本 CSV。注意上传 CSV 到 Azure 门户之前务必逐行核对Host Type是否正确。四、PowerShell 方案二按文本清单批量采集InputList当实例分散在多台机器上时可先把实例清单写入文本文件再用 EOS_DataGenerator_InputList.ps1 批量采集。输入文件格式参考 ServerInstances.txt每行一个实例命名实例写机器名\实例名默认实例直接写机器名Server1\SQL2008 Server1\SQL2008R2 Server2\SQL2008R2 Server3\SQL2008 Server4\SQL2008 Server4运行方式.\EOS_DataGenerator_InputList.ps1交互流程与 LocalDiscovery 类似先输入清单文件名文件需位于脚本同目录脚本会用Split-Path -Parent $MyInvocation.MyCommand.Path定位脚本目录并拼接路径再输入CSV 输出文件名。与 LocalDiscovery 的差异实例来源是Get-Content $SQLServerList逐行读取的文本清单而非本机服务枚举因此可以采集远程机器上的实例WMI 查询Win32_Processor、Win32_ComputerSystem也改为针对清单中的机器名$MachineName执行注意此处$MachineName取自查询结果第三列而从脚本的 SQL 查询看该列未在 SELECT 中显式返回实际采集时以运行环境为准主机类型判定不包含Azure VM 分支无subscriptionId概念仅区分Virtual MachineMicrosoft*/VMWare*制造商与Physical Server输出固定为 5 列name,version,edition,cores,hostType参考 MyPhysicalServers.csv 示例。注意CSV 上传前同样需要核对Host Type。五、从 CSV 到注册批量上传与结果核对生成 CSV 后在 Azure 门户的 ESU 注册页面选择批量注册Bulk Register上传 CSV 即可一次性注册清单内全部实例。注册完成后可在 ESU 实例清单Estate页面核对每条记录的 name、version、edition、cores、hostType 是否正确确认无误后即可进入安全更新下载环节。常见排查要点连接失败InputList 脚本对无法连接的实例会抛出Could not connect to ServerName确认远程实例已开启 TCP/IP、Windows 防火墙放行 1433 端口且当前账号具备该实例的登录权限cores 口径差异T-SQL 脚本hyperthread_ratio与 PowerShell 脚本Win32_Processor.NumberOfCores统计口径不同同一实例两个脚本输出可能不同建议以实际物理核心数为准核对Host Type 误判虚拟化平台未被脚本识别如 KVM、Hyper-V 的制造商值不在Microsoft/VMWare之列时会被归为Physical Server需人工修正后再上传。六、适用范围与脚本声明本模块的脚本以 ESU 注册信息生成器Data Generator形式提供官方说明见 scripts.md其注册信息字段约定与 Azure 门户的 ESU 批量注册入口一一对应。所有脚本均为示例性质不隶属任何微软标准支持计划按AS IS提供不含任何明示或默示担保包括适销性与特定用途适用性担保使用风险由使用者自行承担实际生产使用前请结合你所在环境的网络、权限与合规要求进行适配与验证。本模块页面正文内容已迁移至 SQL Docs 的 SQL Server 扩展安全更新文档本文所介绍的 ESU 注册信息生成示例脚本仍可通过本仓库的 scripts 目录 获取并使用。赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐SQL Server 扩展安全更新ESU注册信息采集脚本实战指南T-SQL 单实例查询与 PowerShell 批量发现SQL Server 扩展安全更新ESU注册信息采集脚本实战指南T SQL 单实例查询与 PowerShell 批量发现 本文围绕 sql server示例工程数据库教程后端SQL Server 内存数据库 T-SQL 脚本实战指南在 SQL Server 与 Azure SQL Database 中启用 In-Memory OLTP 与内存分析SQL Server 内存数据库 T SQL 脚本实战指南在 SQL Server 与 Azure SQL Database 中启用 In Memory OL示例工程数据库教程后端WideWorldImporters 行级安全性Row-Level Security实战指南基于 SQL Server 2016 与 Azure SQL Database 的 T-SQL 演示WideWorldImporters 行级安全性Row Level Security实战指南基于 SQL Server 2016 与 Azure SQL示例工程数据库教程后端上一篇Argo Workflows 使用 emptyDir 卷解决输出 Artifacts/Parameters 收集问题下一篇深入Sidekiq-Cron揭秘分布式环境下的任务调度机制与10个实用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考