Исключение перечисления экземпляров SQL Server с помощью SMO WMI ManagedComputer

Вопрос или проблема

Я пытаюсь использовать SMO WMI API/объекты в PowerShell 2.0 на Windows 7 с установленным SQL Server 2008 R2, чтобы получить список экземпляров SQL Server на локальном компьютере, используя объект Managed Computer. Однако, я получаю исключения после того, как создам объекты, когда пытаюсь получить к ним доступ. Я запускаю PowerShell от имени администратора.

$computer = New-Object Microsoft.SqlServer.Management.Smo.WMI.ManagedComputer ($env:computername)
$computer.ServerInstances

Это приводит к следующей ошибке:

При попытке перечислить коллекцию было выброшено следующее исключение: “Произошла ошибка в SMO при попытке управлять службой.”.
В строке:1 символ:89
+ (New-Object Microsoft.SqlServer.Management.Smo.WMI.ManagedComputer ($env:computername)). <<<< ServerInstances
+ CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException
+ FullyQualifiedErrorId : ExceptionInGetEnumerator

Существует ли какая-то служба, которую мне нужно включить, чтобы это сработало? Служба WMI запущена. Есть ли какие-то другие настройки, которые мне нужны? Почему я не могу перечислить экземпляры SQL Server?

Вы запускаете этот код от имени администратора? Доступ к WMI требует привилегий WMI. Тем не менее, есть альтернативный метод, который я использую. Я задокументировал это здесь: http://www.powershellmagazine.com/2013/04/24/pstip-enumerate-all-sql-server-instances-in-a-network/

[Microsoft.SqlServer.Management.Smo.SmoApplication]::EnumAvailableSqlServers("MyDBServer")

Ответ или решение

Для решения проблемы с перечислением экземпляров SQL Server с использованием объекта ManagedComputer из API SMO WMI в PowerShell 2.0, необходимо обратить внимание на несколько аспектов.

  1. Права доступа: Убедитесь, что вы запускаете PowerShell от администратора. Для доступа к WMI необходимы соответствующие привилегии.

  2. Проверка состояния служб: Хотя служба WMI работает, важно проверить также, запущены ли службы SQL Server и SQL Server Browser. Эти службы необходимы для обнаружения экземпляров SQL Server. Вы можете проверить их состояние через панель управления «Управление компьютером» или использовать следующую команду в PowerShell:

    Get-Service -Name 'MSSQL*', 'SQLBrowser'

    Убедитесь, что обе эти службы запущены.

  3. Проверка наличия SMO: Убедитесь, что у вас установлены все необходимые компоненты SMO и WMI для вашей версии SQL Server. Вы можете повторно установить SQL Server с установкой дополнительных компонентов, если это необходимо.

  4. Использование альтернативного метода: Если проблема остается нерешенной, вы можете использовать альтернативный метод для перечисления всех доступных SQL Server экземпляров. Используйте следующую команду:

    Этот метод должен вернуть список доступных серверов SQL Server, что может быть достаточно для ваших нужд.

  5. Проверка версии PowerShell: Учтите, что PowerShell 2.0 является устаревшей версией. Если возможно, рассмотрите возможность обновления до более новой версии PowerShell (например, PowerShell 5.1 или PowerShell Core), что может помочь избежать некоторых проблем и несовместимостей.

Если после выполнения вышеперечисленных шагов проблема все еще сохраняется, дополнительно проверьте журналы событий на предмет ошибок, связанных с WMI или SQL Server, что может дать больше информации о причине исключений.

Оцените материал
Добавить комментарий

Капча загружается...