无法使用 PowerShell 列出目录等 SQL 数据库

无法使用 PowerShell 列出目录等 SQL 数据库

我正在尝试使用 PowerShell 列出数据库。我可以使用 Inkoke-Sqcmd cmdlet,但无法使用此命令列出数据库:

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 cmdlet 显示以下信息:

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

答案1

无法使用 PowerShell 列出目录等 SQL 数据库

确保加载 SQL Server 管理单元 (Add-PSSnapin) 以支持适当的命令等。以下是语法的示例默认实例或者命名实例SQL Server,以及在 PS 命令中插入该详细信息的位置。

重要的提示:您的 PS逻辑serverr2\serverr2可能不正确,它可能是您仅使用的默认实例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 进行连接。

每个实例都完全独立于其他实例,并拥有自己的一组服务、数据库和配置设置。单个实例的所有组件都集中管理,服务包和补丁会应用于实例内的所有组件。

在安装过程中,您必须指定一个唯一的实例 ID,该 ID 用于定义该实例的目录结构、注册表结构和服务名称。这是 SQL Server 2008 中的新增功能。默认情况下,您指定的实例名称将用作实例 ID。对于默认实例,MSSQLSERVER 将用作实例 ID。

按照Mr_LinDowsMac。 。 。

我的解决方法如下:$databases = (DIR SQLSERVER:\\SQL\serverr2 | SELECT Databases -ExpandProperty Databases | SELECT Name,Owner,Urn)。由于我不能使用 WHERE,我只能使用 $databases = $databases -match "SERVERR2\SERVERR2" 来过滤到该特定实例。– Mr_LinDowsMac

相关内容