Невозможно перечислить базы данных SQL, такие как каталоги с PowerShell

432
Mr_LinDowsMac

Я пытаюсь перечислить базы данных с помощью PowerShell. Я могу использовать командлет Inkoke-Sqcmd, но не могу отобразить базы данных с помощью этой команды:

dir SQLSERVER:\SQL\myserver\sqlinstance\Databases  Get-ChildItem : No se encuentra la ruta de acceso 'SQLSERVER:\SQL\serverr2\serverr2\Databases' porque no existe. En línea: 1 Carácter: 4 + dir <<<< SQLSERVER:\SQL\serverr2\serverr2\Databases + CategoryInfo : ObjectNotFound: (SQLSERVER:\SQL\serverr2\serverr2\Databases:String) [Get-ChildItem], ItemNo tFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand 

Я уже проверил это на своем локальном компьютере, но на моем сервере произошел сбой. Что-то не хватает в моей установке? У меня Windows Server 2008 R2, SQL Server 2008 R2, PowerShell 2.0

Изменить: Командлет Get-Host показывает мне эту информацию:

Name : ConsoleHost Version : 2.0 InstanceId : c1976472-19c0-439e-a4f6-debe59a18616 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : es-MX CurrentUICulture : es-ES PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace 

Я также обнаружил, что мой экземпляр SQL Server - это Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64), а не SQL Server 2008 R2, как я думал

3

1 ответ на вопрос

1
Pimp Juice IT

Невозможно перечислить базы данных SQL, такие как каталоги с PowerShell

Обязательно загрузите оснастки SQL Server (Add-PSSnapin) для поддержки соответствующих команд и т. Д. Ниже приведены примеры синтаксиса для экземпляра по умолчанию или именованного экземпляра SQL Server, а также места, где эти подробности можно вставить в PS команды.

Важное примечание:serverr2\serverr2 в вашей PS логики может быть неправильно, это может быть экземпляром по умолчанию, в котором вы будете использовать DIR SQLSERVER:\\SQL\Serverr2\Databasesтолько. Зеркально отразите эту часть, чтобы соответствовать типу соединения с ядром базы данных из SSMS, возможно, вашего экземпляра SQL Server.


Итак, две возможности попробовать на основе вашей ошибки ( см. Ниже примеры того, как, Add-PSSnapin *sql*если нужно, сначала ):

  • Экземпляр по умолчанию: DIR SQLSERVER:\\SQL\Serverr2\Databases | Select Name
  • Именованный экземпляр: DIR SQLSERVER:\\SQL\Serverr2\Serverr2\Databases | Select Name

Пример именованного экземпляра SQL Server

Add-PSSnapin *sql* DIR SQLSERVER:\\SQL\<SQLServerName>\<InstanceName>\Databases | Select Name 

Пример экземпляра SQL Server по умолчанию

Add-PSSnapin *sql* DIR SQLSERVER:\\SQL\<SQLServerName>\Databases | Select Name 

Дальнейшее чтение и ресурсы


Разница между экземпляром по умолчанию и именованным экземпляром в SQL Server

В чем разница между экземпляром по умолчанию и именованным экземпляром в SQL Server?

Установка SQL Server называется экземпляром. До SQL Server 7.0 включительно на сервере была возможна только одна установка SQL Server, но это ограничение не подходило для ряда сценариев развертывания, которые требовались клиентам, включая высокую доступность и консолидацию.

С выпуском SQL Server 2000 было возможно несколько установок SQL Server на одном сервере, которые назывались экземплярами SQL Server. SQL Server 2008 продолжается с этой моделью и с очень немногими изменениями. Экземпляр по умолчанию имеет тот же профиль, что и установки SQL Server в прошлом; Вы устанавливаете SQL Server, а затем подключаетесь, используя имя компьютера сервера. Ваш Windows Server может иметь только одно имя компьютера, поэтому вы можете использовать его только для подключения к одному экземпляру SQL Server. Это называется экземпляром по умолчанию.

Если вы устанавливаете дополнительные экземпляры SQL Server, они называются именованными экземплярами. Вы подключаетесь к ним, используя формат. Например, если у вас есть сервер с именем PLUTO и вы устанавливаете именованный экземпляр с именем SQL1, вы должны подключиться к этому экземпляру с помощью PLUTOSQL1. Если вы установили другой именованный экземпляр с именем SQL2, вы бы подключились, используя PLUTO SQL2. Если у вас установлен экземпляр по умолчанию, вы бы подключились с помощью PLUTO.

Каждый экземпляр полностью независим от любого другого экземпляра и имеет собственный набор служб, баз данных и параметров конфигурации. Все компоненты одного экземпляра управляются вместе, а пакеты обновления и исправления применяются ко всем компонентам в экземпляре.

В процессе установки необходимо указать уникальный идентификатор экземпляра, который используется для определения структуры каталогов, структуры реестра и имен служб для этого экземпляра. Это новое в SQL Server 2008. По умолчанию указанное имя экземпляра используется в качестве идентификатора экземпляра. Для экземпляра по умолчанию MSSQLSERVER используется в качестве идентификатора экземпляра.

Согласно Mr_LinDowsMac ., ,

Я обойти так: $databases = (DIR SQLSERVER:\\SQL\serverr2 | SELECT Databases -ExpandProperty Databases | SELECT Name,Owner,Urn). Поскольку я не могу использовать WHERE, я просто использую $ database = $ database -match "SERVERR2 \ SERVERR2", чтобы отфильтровать этот конкретный экземпляр. - Mr_LinDowsMac

@Mr_LinDowsMac У вас, вероятно, есть 1-3 потенциальных проблемы (потенциально 1, 2 или все 3) из того, что я вижу, ** `1.` ** сначала загрузите` Add-PSSnapin`, а затем выполните команду `DIR` * * `2.` ** Убедитесь, что у вас ** ДВА` [\\] `обратной косой черты ** в этой части этой команды` DIR SQLSERVER: \\ SQL` ** `3.` ** вам просто нужно убедиться, что вы указываете на правильный ** по умолчанию ** или ** именованный ** экземпляр SQL Server в вашей конфигурации. Pimp Juice IT 8 лет назад 0
DIR SQLSERVER: \\ SQL \ server \ namedinstance \ Я получаю список с ролями, базами данных, конечными точками, ролями и т. Д., Но не могу DIR внутри них. Mr_LinDowsMac 8 лет назад 0
Я сделал это с самого начала, настоящая проблема в том, что это не работает. Тем не менее, я пропустил эту часть `Add-PSSnapin`. Я не запускал его, потому что не уверен, что он был связан, и потому что он работает без \ Databases Mr_LinDowsMac 8 лет назад 0
Нет, извините, на самом деле это не работает. Это просто перечисление мне установленных экземпляров. Но я все еще не могу перечислить базы данных. Mr_LinDowsMac 8 лет назад 0
SQLCMD -L перечисляет мой экземпляр в UPPERCASE, но он все равно не работает. Теперь я пытаюсь обойти это: DIR SQLSERVER: \\ SQL \ serverr2 | ВЫБРАТЬ Базы данных -ExpandProperty Базы данных | ВЫБЕРИТЕ Имя, Владелец, Urn`, но он перечисляет мне Базы данных из другого экземпляра, который мне не нужен. Я не могу отфильтровать Mr_LinDowsMac 8 лет назад 0
Я работаю так: `$ database = (DIR SQLSERVER: \\ SQL \ serverr2 | SELECT Базы данных -ExpandProperty Базы данных | SELECT Имя, Владелец, Урна)`. Так как я не могу использовать ГДЕ, я просто использую `$ database = $ базы данных -match "SERVERR2 \\ SERVERR2" `для фильтрации к этому конкретному экземпляру. Mr_LinDowsMac 8 лет назад 0