Powershell: найти все экземпляры SQL Server на сервере ser?

#sql-server #powershell

#sql-server #powershell

Вопрос:

Строго говоря, вопрос в том, что я использую это решение, и оно работает, но есть ли лучший способ?

Со следующими оговорками.

1) Я не хочу выполнять поиск по всей сети для экземпляров SQL, я опрашиваю известные серверы SQL, но я хочу получить имена экземпляров на каждом.

2) Код предполагает, что Microsoft никогда не изменит отображаемое имя для службы SQL Server.

 function getSQLInstance ([string]$SERVER) {
    $services = Get-Service -Computer $SERVER
    # Filter for SQL services
    $services = $services | ? DisplayName -like "SQL Server (*)"
    # Remove MSSQL$ qualifier to get instance name
    try {
        $instances = $services.Name | ForEach-Object {($_).Replace("MSSQL`$","")}
    }catch{
        # Error if none found
        return -1
    }
    return $instances
}

getSQLInstance "YOUR_SERVER"
  

Ответ №1:

Вместо того, чтобы заново изобретать колесо, взгляните на то, как SQL Power Doc обнаруживает экземпляры на сервере. Который, судя по NetworkScan.psm1 , очень похож на ваш подход:

 $ManagedComputer.Services | ForEach-Object {

                if (($_.Name).IndexOf('$') -gt 0) {
                    $InstanceName = ($_.Name).Substring(($_.Name).IndexOf('$')   1)
                    $IsNamedInstance = $true
                    $ManagedComputerServerInstanceName = $InstanceName
                } else {
                    $InstanceName = $null
                    $IsNamedInstance = $false
                    $ManagedComputerServerInstanceName = $_.Name
                }
  

Или просто используйте SQL Power Doc и укажите его на определенные имена серверов, чтобы собрать эти и другие данные об экземплярах.