Вопрос или проблема
Я пытаюсь использовать 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, необходимо обратить внимание на несколько аспектов.
-
Права доступа: Убедитесь, что вы запускаете PowerShell от администратора. Для доступа к WMI необходимы соответствующие привилегии.
-
Проверка состояния служб: Хотя служба WMI работает, важно проверить также, запущены ли службы SQL Server и SQL Server Browser. Эти службы необходимы для обнаружения экземпляров SQL Server. Вы можете проверить их состояние через панель управления «Управление компьютером» или использовать следующую команду в PowerShell:
Get-Service -Name 'MSSQL*', 'SQLBrowser'
Убедитесь, что обе эти службы запущены.
-
Проверка наличия SMO: Убедитесь, что у вас установлены все необходимые компоненты SMO и WMI для вашей версии SQL Server. Вы можете повторно установить SQL Server с установкой дополнительных компонентов, если это необходимо.
-
Использование альтернативного метода: Если проблема остается нерешенной, вы можете использовать альтернативный метод для перечисления всех доступных SQL Server экземпляров. Используйте следующую команду:
Этот метод должен вернуть список доступных серверов SQL Server, что может быть достаточно для ваших нужд.
-
Проверка версии PowerShell: Учтите, что PowerShell 2.0 является устаревшей версией. Если возможно, рассмотрите возможность обновления до более новой версии PowerShell (например, PowerShell 5.1 или PowerShell Core), что может помочь избежать некоторых проблем и несовместимостей.
Если после выполнения вышеперечисленных шагов проблема все еще сохраняется, дополнительно проверьте журналы событий на предмет ошибок, связанных с WMI или SQL Server, что может дать больше информации о причине исключений.