Sql-Server

無法使用 powershell 獲取數據庫或其對象

  • February 12, 2016

我的伺服器和開發電腦都安裝了 Powershell。在我的開發機器中,顯然安裝了最新版本的 PowerShell 或 SQL Server ‘sqlps’ 的一些組件。我目前的問題是我無法像在我的開發機器中那樣列出數據庫,如下所示:

PS SQLSERVER:\> ls SQLSERVER:\\SQL\server\instance\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\server\instance\Databases
   + CategoryInfo          : ObjectNotFound: (SQLSERVER:\SQL\server\instance\Databases:String) [Get-ChildItem], ItemNotFoundException
   + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

顯然我沒有辦法獲得像儲存過程、視圖等這樣的子項。

但是,我可以列出已安裝的實例,還可以通過列出數據庫來解決此問題:

DIR SQLSERVER:\\SQL\serverr2 | SELECT Databases -ExpandProperty Databases | SELECT Name,Owner,Urn

但仍然需要獲取其他對象,如儲存過程、視圖、函式等。

這是 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 的@@version 是Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)

編輯:根據$PSVersionTable.PSVersion我的伺服器,我已經安裝了 PowerShell 2.0。此外,我發現我無法做到,Import-Module sqlps但由於某種原因,我能夠做到,dir正如我已經描述的那樣(顯然存在目前問題)。

我在 serverfault 中找到了答案:

https://serverfault.com/questions/355014/sql-server-powershell-cannot-find-path-error

我必須執行一個腳本才能在 PowerShell 中正確載入管理單元:

#
# Add the SQL Server provider.
#

$ErrorActionPreference = "Stop"

$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"

if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
   throw "SQL Server Provider is not installed."
}
else
{
   $item = Get-ItemProperty $sqlpsreg
   $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


#
# Set mandatory variables for the SQL Server rovider
#
Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0
Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30
Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false
Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000

#
# Load the snapins, type data, format data
#
Push-Location
cd $sqlpsPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Update-TypeData -PrependPath SQLProvider.Types.ps1xml 
update-FormatData -prependpath SQLProvider.Format.ps1xml 
Pop-Location

載入後,我可以列出該數據庫實例中的每個對象

引用自:https://dba.stackexchange.com/questions/128631