Não é possível listar bancos de dados SQL como diretórios com PowerShell

Não é possível listar bancos de dados SQL como diretórios com PowerShell

Estou tentando listar bancos de dados com o PowerShell. Consigo usar o cmdlet Inkoke-Sqcmd, mas não consigo listar bancos de dados com 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

Já testei isso no meu computador local, mas falhei no meu servidor. Está faltando alguma coisa na minha instalação? Tenho Windows Server 2008 R2, SQL Server 2008 R2, PowerShell 2.0

Editar: O cmdlet Get-Host me mostra esta informação:

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

Também descobri que minha instância do SQL Server é o Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) e não o SQL Server 2008 R2 como pensei

Responder1

Não é possível listar bancos de dados SQL como diretórios com PowerShell

Certifique-se de carregar os snap-ins do SQL Server (Add-PSSnapin) para oferecer suporte aos comandos apropriados, etc. Abaixo estão exemplos da sintaxe com parainstância padrãoouinstância nomeadado SQL Server e onde inserir esses detalhes nos comandos PS.

Nota importante:A serverr2\serverr2lógica do seu PS pode estar incorreta, pode ser a instância padrão onde você usaria DIR SQLSERVER:\\SQL\Serverr2\Databasesapenas. Espelhe esta parte para corresponder ao tipo de conexão ao mecanismo de banco de dados do SSMS, talvez da sua instância do SQL Server.


Portanto, duas possibilidades para tentar com base no seu erro (veja abaixo exemplos de como fazer isso Add-PSSnapin *sql*primeiro, se necessário):

  • Instância padrão: DIR SQLSERVER:\\SQL\Serverr2\Databases | Select Name
  • Instância nomeada: DIR SQLSERVER:\\SQL\Serverr2\Serverr2\Databases | Select Name

Exemplo de instância nomeada do SQL Server

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

Exemplo de instância padrão do SQL Server

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

Leitura adicional e recursos


Diferença entre instância padrão e instância nomeada no SQL Server

Quais são as diferenças entre a instância padrão e a instância nomeada no SQL Server?

Uma instalação do SQL Server é chamada de instância. Até o SQL Server 7.0 inclusive, apenas uma instalação do SQL Server era possível em um servidor, mas essa restrição não se adequava a vários cenários de implantação exigidos pelos clientes, incluindo alta disponibilidade e consolidação.

Com o lançamento do SQL Server 2000, múltiplas instalações do SQL Server eram possíveis em um único servidor e eram conhecidas como instâncias do SQL Server. O SQL Server 2008 continua com esse modelo e com pouquíssimas alterações. Uma instância padrão tem praticamente o mesmo perfil que as instalações do SQL Server tinham no passado; você instala o SQL Server e se conecta usando o nome do computador do servidor. Seu Windows Server só pode ter um nome de computador, portanto você só pode usá-lo para se conectar a uma instância do SQL Server. Isso é chamado de instância padrão.

Se você instalar instâncias adicionais do SQL Server, elas serão chamadas de instâncias nomeadas. Você se conecta a eles usando o formato. Por exemplo, se você tiver um servidor chamado PLUTO e instalar uma instância nomeada chamada SQL1, você se conectará a essa instância usando PLUTOSQL1. Se você instalasse outra instância nomeada chamada SQL2, você se conectaria usando PLUTO SQL2. Se você tivesse uma instância padrão instalada, você se conectaria usando PLUTO.

Cada instância é completamente independente de qualquer outra instância e possui seu próprio conjunto de serviços, bancos de dados e definições de configuração. Todos os componentes de uma única instância são gerenciados juntos e service packs e patches são aplicados a todos os componentes de uma instância.

Durante o processo de instalação, você deve especificar um ID de instância exclusivo, que é usado para definir a estrutura de diretórios, a estrutura de registro e os nomes de serviço dessa instância. Isso é novo no SQL Server 2008. Por padrão, o nome da instância especificado é usado como ID da instância. Para a instância padrão, MSSQLSERVER é usado como ID da instância.

ConformeMr_LinDowsMac. . .

Eu resolvo assim: $databases = (DIR SQLSERVER:\\SQL\serverr2 | SELECT Databases -ExpandProperty Databases | SELECT Name,Owner,Urn). Como não posso usar WHERE, apenas uso $databases = $databases -match "SERVERR2\SERVERR2" para filtrar essa instância específica. – Mr_LinDowsMac

informação relacionada