You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PowerShell中获取MSSQL实例版本:Get-SqlInstance不可用的替代方案

获取运行中MSSQL实例版本信息的替代方案

你已通过以下PowerShell代码找到本地4个运行中的MSSQL实例:

$Hostname = (Get-WmiObject Win32_OperatingSystem).CSName

$GetSQLInstance = Get-Service -ComputerName $Hostname | Where-Object { ($_.Name -eq 'mssqlserver' -or $_.Name -like 'mssql$*') -and $_.DisplayName -like 'SQL Server*'}

$GetSQLInstance

输出:

Status   Name               DisplayName                           
------   ----               -----------                           
Running  MSSQL$INSTANCE01   SQL Server (INSTANCE01)               
Running  MSSQL$INSTANCE02   SQL Server (INSTANCE02)               
Running  MSSQL$INSTANCE03   SQL Server (INSTANCE03)               
Running  MSSQL$INSTANCE04   SQL Server (INSTANCE04)               

由于未安装SqlServer模块,Get-SqlInstance命令无法使用,以下是几种无需额外安装模块的可靠方案:

方法1:通过SQL Server专属WMI类查询

使用SqlServiceAdvancedProperty类直接获取版本信息,这是最精准的方式之一:

# 获取所有运行中的SQL实例服务
$runningInstances = Get-Service | Where-Object { 
    ($_.Name -eq 'mssqlserver' -or $_.Name -like 'mssql$*') -and $_.Status -eq 'Running' 
}

foreach ($instance in $runningInstances) {
    # 处理默认实例和命名实例的名称格式
    $instanceName = $instance.Name -eq 'mssqlserver' ? 'MSSQLSERVER' : $instance.Name.Substring(5)
    # 查询版本属性
    $versionProp = Get-CimInstance -ClassName SqlServiceAdvancedProperty -Filter "ServiceName='$($instance.Name)' AND PropertyName='VERSION'"
    
    # 输出结构化结果
    [PSCustomObject]@{
        InstanceName = $instanceName
        DisplayName  = $instance.DisplayName
        Version      = $versionProp.PropertyStrValue
    }
}

方法2:读取注册表信息

SQL Server会将版本、Edition等信息存储在注册表中,可直接读取:

$runningInstances = Get-Service | Where-Object { 
    ($_.Name -eq 'mssqlserver' -or $_.Name -like 'mssql$*') -and $_.Status -eq 'Running' 
}

foreach ($instance in $runningInstances) {
    $instanceName = $instance.Name -eq 'mssqlserver' ? 'MSSQLSERVER' : $instance.Name.Substring(5)
    
    # 确定注册表路径
    if ($instance.Name -eq 'mssqlserver') {
        $regPath = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLSERVER\Setup'
    } else {
        # 通过实例名称获取对应的Instance ID
        $instanceId = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL").$instanceName
        $regPath = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$instanceId\Setup"
    }
    
    # 读取并输出信息
    if (Test-Path $regPath) {
        $setupDetails = Get-ItemProperty $regPath
        [PSCustomObject]@{
            InstanceName = $instanceName
            DisplayName  = $instance.DisplayName
            Version      = $setupDetails.Version
            Edition      = $setupDetails.Edition
        }
    }
}

方法3:使用sqlcmd执行SQL查询

如果拥有实例的登录权限,可通过默认安装的sqlcmd工具执行查询获取详细版本信息:

$runningInstances = Get-Service | Where-Object { 
    ($_.Name -eq 'mssqlserver' -or $_.Name -like 'mssql$*') -and $_.Status -eq 'Running' 
}

foreach ($instance in $runningInstances) {
    # 构建服务器连接字符串
    $server = $instance.Name -eq 'mssqlserver' ? '.' : ".\$($instance.Name.Substring(5))"
    # 执行@@VERSION查询,-h -1表示去掉表头和空行
    $versionInfo = sqlcmd -S $server -Q "SELECT @@VERSION" -b -h -1
    
    [PSCustomObject]@{
        InstanceName = $instance.Name -eq 'mssqlserver' ? 'MSSQLSERVER' : $instance.Name.Substring(5)
        DisplayName  = $instance.DisplayName
        FullVersionInfo = $versionInfo.Trim()
    }
}

内容的提问来源于stack exchange,提问作者saturnSam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:15:34