無法使用 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 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,用於定義該實例的目錄結構、登錄結構和服務名稱。這是 SQL Server 2008 中的新增功能。對於預設實例,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

相關內容