Sql-Server
無法使用 powershell 獲取數據庫或其對象
我的伺服器和開發電腦都安裝了 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
載入後,我可以列出該數據庫實例中的每個對象