PowerShell - 列出我系统上的所有SQL实例?

时间:2011-09-22 14:21:56

标签: sql-server-2008 powershell

是否有Powershell命令列出我系统上的所有SQL实例? (MS SQL 2008)

7 个答案:

答案 0 :(得分:18)

另一种方法是......比SQLPS快一点,以便快速回答。


(get-itemproperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances

答案 1 :(得分:4)

导入powershell sql server extensions:

 Import-Module SqlServer 

然后执行这些命令

Set-Location SQLSERVER:\SQL\localhost
Get-ChildItem

答案 2 :(得分:4)

我发现(至少对我来说)以上都没有返回我的SQL Express实例。我有5个命名实例,4个全脂SQL Server,1个SQL Express。 4个全脂包含在上面的答案中,SQL Express不包括在内。所以,我在互联网上进行了一些挖掘,并且遇到了James Kehr的this article,其中列出了有关计算机上所有SQL Server实例的信息。我使用此代码作为编写下面函数的基础。

# get all sql instances, defaults to local machine, '.'
Function Get-SqlInstances {
  Param($ServerName = '.')

  $localInstances = @()
  [array]$captions = gwmi win32_service -computerName $ServerName | ?{$_.Name -match "mssql*" -and $_.PathName -match "sqlservr.exe"} | %{$_.Caption}
  foreach ($caption in $captions) {
    if ($caption -eq "MSSQLSERVER") {
      $localInstances += "MSSQLSERVER"
    } else {
      $temp = $caption | %{$_.split(" ")[-1]} | %{$_.trimStart("(")} | %{$_.trimEnd(")")}
      $localInstances += "$ServerName\$temp"
    }
  }
  $localInstances
}

答案 3 :(得分:3)

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | out-null
$mach = '.'
$m = New-Object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer') $mach
$m.ServerInstances

答案 4 :(得分:2)

$a = "MyComputerName"

 [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources() | ? { $_.servername -eq $a}

Aaron方法返回更确定的响应。 阅读有关Instance.GetDataSources()

Here

答案 5 :(得分:1)

  

System.Data.Sql命名空间包含支持SQL Server特定功能的类。

通过使用System.Data.Sql命名空间,您可以在Windows power shell中使用此命令获取计算机上的所有MSSQL实例: [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources()

答案 6 :(得分:0)

此函数将返回对象列表中所有已安装的实例以及版本详细信息:

function ListSQLInstances {
$listinstances = New-Object System.Collections.ArrayList
$installedInstances = (get-itemproperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances
foreach ($i in $installedInstances) {
    $instancefullname = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL').$i
    $productversion = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$instancefullname\Setup").Version
    $majorversion = switch -Regex ($productversion) {
        '8' { 'SQL2000' }
        '9' { 'SQL2005' }
        '10.0' { 'SQL2008' }
        '10.5' { 'SQL2008 R2' }
        '11' { 'SQL2012' }
        '12' { 'SQL2014' }
        '13' { 'SQL2016' }    
        '14' { 'SQL2017' } 
        '15' { 'SQL2019' } 
        default { "Unknown" }
    }
    $instance = [PSCustomObject]@{
        Instance             = $i
        InstanceNameFullName = $instancefullname;
        Edition              = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$instancefullname\Setup").Edition;
        ProductVersion       = $productversion;
        MajorVersion         = $majorversion;
    }
    $listinstances.Add($instance)
}

Return $listinstances
}

$instances = ListSQLInstances
foreach ($instance in $instances) {
    Write-Host $instance.Instance
}