尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

SQL Server 扩展安全更新(ESU)注册信息采集脚本实战指南:T-SQL 单实例查询与 PowerShell 批量发现

发布时间:2026/9/25 3:22:35

资讯中心
01
ARTICLE

SQL Server 扩展安全更新(ESU)注册信息采集脚本实战指南:T-SQL 单实例查询与 PowerShell 批量发现

SQL Server 扩展安全更新(ESU)注册信息采集脚本实战指南: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-samples 仓库中 sql-server-extended-security-updates 模块提供的三套 ESU 注册信息采集脚本展开完整讲解如何用 T-SQL 脚本采集单个实例的注册信息以及如何用 PowerShell 脚本自动发现单机全部实例或清单文件中列出的多台机器实例并批量生成可供 ESU 订阅批量注册使用的 CSV 文件。读完本文你将掌握 ESU 注册所需字段name / version / edition / cores / hostType的采集逻辑、脚本的运行方式、CSV 输出格式以及上传前必须复核的校验要点。SQL Server 扩展安全更新Extended Security Updates简称 ESU面向已停止主流支持、进入生命周期末期的 SQL Server 版本订阅用户在 Azure 门户中注册受保护的实例后可继续获得安全更新。注册环节的关键前置步骤之一就是为每台实例采集标准化的注册信息——包括实例名、SQL Server 版本、版本类型Edition、物理核心数与宿主机类型——并整理成可批量上传的 CSV。本文所讲解的脚本正是为此设计的官方示例实现对应说明文档为 scripts.md。注册信息包含哪些字段无论采用哪套脚本最终输出的注册信息都围绕以下五个核心字段Azure 虚拟机场景下还会追加订阅级字段字段含义采集方式nameSQL Server 实例名机器名\实例名默认实例为机器名SERVERPROPERTY(ServerName)或服务发现version大版本标识如2008、2008R2、2012由SERVERPROPERTY(ProductVersion)前四位映射edition版本类型如 Enterprise、Standard、DeveloperSERVERPROPERTY(Edition)取第一个空格前词cores逻辑/物理核心数T-SQL 取sys.dm_os_sys_info.hyperthread_ratioPowerShell 用 WMI 累加物理核心hostType宿主机类型Physical Server / Virtual Machine / Azure Virtual Machine读取 BIOS 制造商或 Azure 上下文推断版本号到版本名称的映射是两套脚本共用的核心逻辑对应关系如下ProductVersion 前缀版本名称10.0200810.52008R211.0201212.0201413.0201614.0201715.02019其他Other / Unknown该映射覆盖了 20082019 的大版本区间识别范围之外的版本会落入Other兜底分支便于后续人工确认。三套脚本的适用场景总览脚本采集范围运行位置输出EOS_DataGenerator_SingleInstance.sql单个 SQL Server 实例直接在该实例的查询窗口执行SSMS / Azure Data Studio单行结果集EOS_DataGenerator_LocalDiscovery.ps1本机上的所有 SQL Server 实例目标机器本地以管理员身份运行 PowerShellCSV 文件保存在脚本所在目录EOS_DataGenerator_InputList.ps1文本清单中列出的所有实例任一可访问目标机器的 Windows 主机CSV 文件保存在脚本所在目录其中 LocalDiscovery 既可用于 Azure 虚拟机也可用于本地物理服务器或本地虚拟机InputList 则适合一次性批量处理分散在多台机器上的实例清单。两套 PowerShell 脚本生成的 CSV 均可直接用于 ESU 订阅的批量注册Bulk Register。使用 T-SQL 脚本采集单实例注册信息官方示例脚本 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;脚本执行流程与原理识别宿主机类型脚本调用系统存储过程xp_instance_regread读取注册表HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS下的SystemManufacturer键值得到 BIOS 固件制造商。默认假设为Physical Server物理服务器若制造商的小写值等于microsoft或vmware则判定为Virtual Machine虚拟机。这是根据微软自家的 Hyper-V 与 VMware 是主流虚拟化平台这一经验规则做出的推断所以脚本末尾专门提示执行后务必人工核对 Host Type 是否与实例实际运行环境一致。统计核心数从动态管理视图sys.dm_os_sys_info取出hyperthread_ratio作为核心数。需要说明的是该值在启用超线程Hyper-Threading的环境下反映的是逻辑处理器与物理处理器的比值实际返回的数值更接近逻辑核心口径与下方 PowerShell 脚本用 WMI 累加物理核心Win32_Processor.NumberOfCores的统计方式不同若两种方式结果存在差异属于正常现象。读取版本信息SERVERPROPERTY(Edition)返回完整版本名称如Enterprise Edition (64-bit)脚本用LEFT(Edition, CHARINDEX( , Edition, 0) - 1)截取第一个空格前的单词得到简化的edition字段SERVERPROPERTY(ProductVersion)返回10.0.xxxx这类构建版本号取其前四位LEFT(SQLVersion, 4)并按上文的映射表转换为2008/2008R2/2012等版本名称。组装输出最终返回一行包含nameSERVERPROPERTY(ServerName)、version、edition、cores、hostType五个字段的结果集。在 SSMS 或 Azure Data Studio 中连接到目标实例、切换到任意用户数据库后执行即可看到结果。该脚本的输出结构恰好与 PowerShell 脚本生成的 CSV 表头一一对应便于与批量采集结果对齐。使用 PowerShell 脚本批量发现本机实例EOS_DataGenerator_LocalDiscovery.ps1 面向一台机器上可能安装多个 SQL Server 实例的常见场景它先枚举本机全部 SQL Server 服务再逐个连接查询最终把所有实例的信息汇总写成一个 CSV 文件。运行方式在脚本所在目录执行.\EOS_DataGenerator_LocalDiscovery.ps1。脚本开头以交互方式提示两个关键输入输出 CSV 文件名默认保存在脚本所在目录若未以.csv结尾会自动补全后缀是否为 Azure 虚拟机Y/N回答Y时脚本会进入 Azure 上下文处理分支。Azure 虚拟机场景的额外处理当回答Y时脚本依次执行Install-Module -Name Az -AllowClobber -Scope CurrentUser安装/升级 Azure PowerShell 模块并Import-Module AzConnect-AzAccount -Subscription $subscriptionName交互式登录 Azure 账号通过Get-AzSubscription取得订阅 ID再用Get-AzVM -Name $env:computername按本机计算机名定位虚拟机得到资源组名与 VM 名称用 WMI 的Win32_OperatingSystem.Caption识别操作系统的 Windows Server 版本2008 / 2008 R2 / 2012 / 2012 R2 / 2016 / 2019作为azureVmOS字段。这些订阅级信息会追加到 CSV 中用于在 Azure 侧把实例归属到正确的订阅与资源组。实例发现从服务枚举到实例名核心函数Get-SQLInstance的实现思路是$services Get-Service -Computer $env:computername -DisplayName SQL Server (*) # Remove MSSQL$ qualifier to get instance name $ServerNames $services.Name | ForEach-Object {$env:computername \ ($_).Replace(MSSQL$,)} If ($ServerNames -like *MSSQLSERVER) { $ServerNames $env:computername }即通过Get-Service按显示名SQL Server (*)枚举本机所有 SQL Server 服务含命名实例把服务名中的MSSQL$前缀去掉后拼成机器名\实例名若发现默认实例服务名含MSSQLSERVER则直接用机器名表示。这样无论机器上装了几个实例都能被一次性纳入采集范围。实例信息采集连接、查询与 WMI对每个实例Get-Info函数通过System.Data.SqlClient.SqlConnection连接串server$ServerName;Trusted_Connectiontrue即 Windows 集成认证建立连接执行SELECT SERVERPROPERTY(Edition) AS Edition, SERVERPROPERTY(ProductVersion) AS Version;随后对版本号取前四位做与 T-SQL 脚本一致的版本映射Edition取空格前第一个单词。宿主机类型的判定规则为存在订阅上下文$subscriptionId非空→Azure Virtual Machine否则按 WMIWin32_ComputerSystem.Manufacturer判断以Microsoft*或VMWare*开头 →Virtual Machine其余情况 →Physical Server。核心数统计通过遍历Get-WmiObject Win32_Processor完成累加每个物理处理器的NumberOfCores同时统计CPUs数量。CSV 输出脚本末尾按是否处于 Azure 上下文输出不同列结构的 CSVGet-SQLInstance | Foreach-Object {Get-Info $_ $subscriptionId $resourceGroup $IsAzureVMName $IsAzureVMOS} | Select-Object name, version, edition, cores, hostType | ConvertTo-Csv -NoTypeInformation | % { $_ -Replace , } | Out-File -FilePath $CSVfilenameAzure 场景下会额外追加subscriptionId、resourceGroup、azureVmName、azureVmOS四列。仓库中附带的示例输出 MyAzureVMs.csv 展示了 Azure 场景的完整格式如ProdServerUS1\SQL01,2008 R2,Enterprise,12,Azure Virtual Machine,61868ab8-...,RG,VM1,2012而 MyPhysicalServers.csv 则对应非 Azure 场景的五列格式。生成的 CSV 即为 Azure 门户中 ESU 批量注册Bulk Register所需的输入文件。门户中从SQL Server 注册表页面点击↑ Bulk Register进入批量注册流程即可上传该 CSV 完成实例批量注册使用 PowerShell 脚本批量采集清单中的实例当实例分散在多台机器、不适合逐台登录执行脚本时可以使用 EOS_DataGenerator_InputList.ps1把目标实例逐行写进一个文本文件脚本会逐行读取、逐个连接采集最终输出汇总 CSV。运行方式同样为.\EOS_DataGenerator_InputList.ps1交互式输入两个参数输入清单文件名必须是位于脚本目录下的文本文件输出 CSV 文件名保存在脚本目录自动补.csv后缀。输入文件的参考格式见 ServerInstances.txt每行一个实例命名实例用机器名\实例名默认实例直接写机器名Server1\SQL2008 Server1\SQL2008R2 Server2\SQL2008R2 Server3\SQL2008 Server4\SQL2008 Server4脚本的核心处理管线为Get-Content $SQLServerList | Foreach-Object {Get-Info $_ } | Select-Object name, version, edition, cores, hostType | ConvertTo-Csv -NoTypeInformation | % { $_ -Replace , } | Out-File -FilePath $CSVfilename -Encoding UTF8Get-Info函数对每个清单项执行与前文一致的连接、SERVERPROPERTY查询与版本映射宿主机类型按 WMI 制造商判断Microsoft*/VMWare*→Virtual Machine否则Physical Server核心数与 CPU 数量同样通过 WMI 统计。与 LocalDiscovery 的区别在于它不做 Azure 上下文探测因此输出固定为五列格式name,version,edition,cores,hostType且 WMI 查询需能访问到目标机器脚本会从查询结果中取得机器名用于后续 WMI 调用前提是当前账号对目标机器具有相应 WMI 权限。使用注意事项与校验要点必须复核 Host Typescripts.md与两套 PowerShell 脚本均反复强调上传 CSV 前要逐一核对hostType字段。T-SQL 与 InputList 脚本仅凭 BIOS 制造商Microsoft / VMware判断虚拟化LocalDiscovery 则多了一个 Azure 订阅上下文判定对于嵌套虚拟化、自研虚拟化平台或云厂商定制镜像等场景自动判定结果可能与实际不符需人工修正后上传。权限前提PowerShell 脚本使用 Windows 集成认证连接实例Trusted_Connectiontrue要求运行账号具备目标实例的访问权限与目标机器的 WMI 查询权限T-SQL 脚本通过xp_instance_regread读取注册表需在能访问实例注册表的上下文中执行。输出位置与编码所有 CSV 均保存在脚本所在目录InputList 脚本显式使用-Encoding UTF8输出便于在 Azure 门户批量注册时正确解析。脚本性质声明三套脚本均为 Microsoft 提供的示例脚本脚本头部的 Disclaimer 明确指出示例脚本不受任何 Microsoft 标准支持计划或服务支持按原样AS IS提供不附带任何明示或默示担保使用风险由使用者自行承担。生产环境使用前请先在测试实例上验证输出结果。版本覆盖范围版本映射表以脚本编写时的 ESU 覆盖版本SQL Server 2008、2008 R2 等为核心目标同时兼容到 2019对更新版本会落入Other/Unknown如需支持请自行扩展映射分支。延伸阅读模块总览与 ESU 背景说明readme.md官方脚本说明文档scripts.mdT-SQL 单实例脚本EOS_DataGenerator_SingleInstance.sql本地全实例发现脚本EOS_DataGenerator_LocalDiscovery.ps1清单批量采集脚本EOS_DataGenerator_InputList.ps1输入清单样例ServerInstances.txt输出样例Azure 场景MyAzureVMs.csv输出样例非 Azure 场景MyPhysicalServers.csv赞分享示例工程数据库教程后端【免费下载链接】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点击查看免费下载相关推荐Hoodie.dev客户端API终极指南10个关键功能让前端开发更简单Hoodie.dev客户端API终极指南10个关键功能让前端开发更简单 Hoodie是一个离线优先的JavaScript后端框架专为简化前端开发而设计。它提示例工程数据库教程后端sql-server-samples 实战用 modify-azure-sql-vm-license-type.ps1 批量管理 Azure SQL VM 许可证类型与 ESUsql server samples 实战用 modify azure sql vm license type.ps1 批量管理 Azure SQL VM 许示例工程数据库教程后端SQL Server 内存数据库 T-SQL 脚本实战指南在 SQL Server 与 Azure SQL Database 中启用 In-Memory OLTP 与内存分析SQL Server 内存数据库 T SQL 脚本实战指南在 SQL Server 与 Azure SQL Database 中启用 In Memory OL示例工程数据库教程后端上一篇RapidOCR实时推理优化从毫秒级到微秒级的终极性能突破指南下一篇UniTask WebGL异步存储实现浏览器本地数据的高效管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。