No se pueden enumerar bases de datos SQL como directorios con PowerShell

No se pueden enumerar bases de datos SQL como directorios con PowerShell

Estoy intentando enumerar bases de datos con PowerShell. Puedo usar el cmdlet Inkoke-Sqcmd, pero no puedo enumerar bases de datos con este comando:

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

Ya probé esto en mi computadora local, pero fallé en mi servidor. ¿Falta algo en mi instalación? Tengo Windows Server 2008 R2, SQL Server 2008 R2, PowerShell 2.0

Editar: El cmdlet Get-Host me muestra esta información:

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

También descubrí que mi instancia de SQL Server es Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) y no SQL Server 2008 R2 como pensaba.

Respuesta1

No se pueden enumerar bases de datos SQL como directorios con PowerShell

Asegúrese de cargar los complementos de SQL Server (Add-PSSnapin) para admitir los comandos apropiados, etc. A continuación se muestran ejemplos de la sintaxis de cualquiera de los dos.instancia predeterminadaoinstancia nombradade SQL Server y dónde conectar ese detalle en los comandos PS.

Nota IMPORTANTE:La serverr2\serverr2lógica de su PS puede ser incorrecta, puede ser la instancia predeterminada que usaría DIR SQLSERVER:\\SQL\Serverr2\Databasesúnicamente. Refleje esta parte para que coincida con la forma en que escriba eso para conectarse al motor de base de datos desde SSMS, tal vez de su instancia de SQL Server.


Entonces, hay dos posibilidades para probar según su error (Vea a continuación los ejemplos de cómo hacerlo Add-PSSnapin *sql*si es necesario primero.):

  • Instancia predeterminada: DIR SQLSERVER:\\SQL\Serverr2\Databases | Select Name
  • Instancia nombrada: DIR SQLSERVER:\\SQL\Serverr2\Serverr2\Databases | Select Name

Ejemplo de instancia con nombre de SQL Server

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

Ejemplo de instancia predeterminada de SQL Server

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

Lecturas y recursos adicionales


Diferencia entre instancia predeterminada e instancia con nombre en SQL Server

¿Cuál es la diferencia entre la instancia predeterminada y la instancia con nombre en SQL Server?

Una instalación de SQL Server se denomina instancia. Hasta SQL Server 7.0 inclusive, solo era posible una instalación de SQL Server en un servidor, pero esa restricción no se adaptaba a una serie de escenarios de implementación que los clientes requerían, incluida la alta disponibilidad y la consolidación.

Con el lanzamiento de SQL Server 2000, fueron posibles múltiples instalaciones de SQL Server en un solo servidor y se las conoció como instancias de SQL Server. SQL Server 2008 continúa con este modelo y con muy pocos cambios. Una instancia predeterminada tiene prácticamente el mismo perfil que las instalaciones de SQL Server en el pasado; instala SQL Server y luego se conecta usando el nombre de computadora del servidor. Su Windows Server solo puede tener un nombre de computadora, por lo que solo puede usarlo para conectarse a una instancia de SQL Server. Esto se llama instancia predeterminada.

Si instala instancias adicionales de SQL Server, se las denomina instancias con nombre. Te conectas a ellos usando el formato. Por ejemplo, si tiene un servidor llamado PLUTO e instala una instancia con nombre SQL1, se conectará a esa instancia usando PLUTOSQL1. Si instaló otra instancia con nombre llamada SQL2, se conectaría usando PLUTO SQL2. Si tuviera instalada una instancia predeterminada, se conectaría usando PLUTO.

Cada instancia es completamente independiente de cualquier otra instancia y tiene su propio conjunto de servicios, bases de datos y ajustes de configuración. Todos los componentes de una única instancia se administran juntos y los service packs y parches se aplican a todos los componentes dentro de una instancia.

Durante el proceso de instalación, debe especificar una ID de instancia única, que se utiliza para definir la estructura del directorio, la estructura del registro y los nombres de los servicios para esa instancia. Esto es nuevo en SQL Server 2008. De forma predeterminada, el nombre de instancia que especificó se utiliza como ID de instancia. Para la instancia predeterminada, MSSQLSERVER se utiliza como ID de instancia.

segúnMr_LinDowsMac. . .

Solución alternativa como esta: $databases = (DIR SQLSERVER:\\SQL\serverr2 | SELECT Databases -ExpandProperty Databases | SELECT Name,Owner,Urn). Como no puedo usar WHERE, simplemente uso $databases = $databases -match "SERVERR2\SERVERR2" para filtrar a esa instancia específica. – Mr_LinDowsMac

información relacionada