簡體   English   中英

安裝了 SQL 但 powershell 沒有接收 sqlps 命令(如 invoke-sqlcmd)

[英]SQL installed but powershell not picking up sqlps commands (like invoke-sqlcmd)

我用巧克力安裝了 ms sql server:

choco install SQLServer2012DeveloperEditionWithSP1 -y -f -source 'http://choco.developers.tcpl.ca/chocolatey' -c "$env:WINDIR\temp"

SQL 似乎已安裝並在無法正常工作的 powershell 之外運行良好。 我可以看到 sqlps 模塊:

Get-Module -listavailable

...

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------

Manifest   1.0        SQLASCMDLETS
Manifest   1.0        SQLPS

但是命令似乎丟失了。 我沒有 invoke-sqlcmd 等。理論上,如果我安裝模塊,我應該可以訪問它們,但是當我嘗試導入模塊 sqlps 時,卻收到關於沒有 sqlserver 驅動器的錯誤:

PS C:\WINDOWS\system32> Import-Module SQLPS
Set-Location : Cannot find drive. A drive with the name 'SQLSERVER' does not exist.
At C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS\SqlPsPostScript.ps1:1 char:1
+ Set-Location SQLSERVER:
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (SQLSERVER:String) [Set-Location], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

我知道我的小組中有幾個人完成了這些步驟並且確實使正確的 sql ps 設置正常工作。

任何提示或想法都會非常有幫助。 謝謝。

再會,

我猜您正在使用 SQL Server 2017,因為這是 2017 年的常見問題,我將在下面解釋。 我不確定使用的是什么版本,因為這個問題有點舊,並且在 2017 年 5 月 2 日 22:58 被問到

您得到的錯誤包括基本問題

設置位置:找不到驅動器。 名為“SQLSERVER”的驅動器不存在。

它並不是說模塊“SQLPS”不存在,而是模塊“SQLSERVER”不存在

解釋是直到 2016 年 SQLPS 模塊都包含在 SQL Server 安裝中,但我們使用的 PowerShell 模塊是“SqlServer”模塊。 “SqlServer”模塊包含在 SQL Server Management Studio (SSMS) 16.x 中,但如果您使用的是 SSMS 2017 (17.x),則必須從 PowerShell Gallery 安裝“SqlServer”模塊

安裝它的過程是執行命令:

Install-Module -Name SqlServer

如果您收到類似PackageManagement\\Install-Package : The following commands are already available on this system:...錯誤PackageManagement\\Install-Package : The following commands are already available on this system:...

然后您可以使用以下參數強制安裝: -Force–AllowClobber

由於我不熟悉你的系統,我不會建議你做什么或說你是否應該強制安裝,但這是我在大多數情況下可能會做的解決方案(根據我在此注意到的信息)線)

Install-Module -Name SqlServer -Force –AllowClobber

為了確認該模塊是相反的,您可以執行以下命令:

Get-Module -Name SqlServer -listAvailable | select Name, ModuleType, Version

使用上面的命令檢查您的安裝版本,並在以下命令中使用它以導入最新版本(在我寫這個答案時,版本是 21.0.17279):

Import-Module SqlServer -Version 21.0.17279

就是這樣...如果一切順利,那么您應該能夠使用所有 SQL Server PowerShell 命令

正如所指出的,這里是您現在應該參考的鏈接。

MSDN鏈接

運行 SQL Server Powershell

找不到路徑“SQLSERVER”問題

Jarret 給出了答案。 簡單地加載模塊實際上無濟於事。 這組命令必須在那之后運行。

Push-Location
cd $sqlpsPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Update-TypeData -PrependPath SQLProvider.Types.ps1xml 
update-FormatData -prependpath SQLProvider.Format.ps1xml 
Pop-Location

希望能幫助到你。

只是給未來讀者的一個旁注,我試圖通過 powershell 創建一個 sql 備份。 cmdlet 在Administrator帳戶下正常運行,但是在普通用戶帳戶下運行腳本,我收到以下錯誤:

Cannot find a provider with the name 'SqlServer'

谷歌搜索這個問題把我帶到了這里,但我的問題的答案在這里的論壇帖子中: https : //social.technet.microsoft.com/Forums/windowsserver/en-US/626bb81a-00ba-4239-ad0a-fec32546350a/ check-if-drive-exists-if-not-map?forum=winserverpowershell

我遇到了一個奇怪的問題,希望有人能解決這個問題。

Microsoft SQL Server 2014 (SP2-GDR) (KB4505217) - 12.0.5223.6 (X64)(是的,我知道......這是一個開發服務器)

視窗 2012 R2

PS版本 4.0

我在 PS 腳本中加載 SQL 程序集

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | 出空

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | 出空

如果我在加載程序集后立即運行它,以下將失敗

Get-ChildItem SQLSERVER:\\SQL$env:COMPUTERNAME

Get-ChildItem:找不到驅動器。 名為“SQLSERVER”的驅動器不存在。

如果我先運行以下,我很好。

Invoke-Sqlcmd -Query "SELECT TOP 1 * FROM sys.sysobjects" | 出空

Get-ChildItem SQLSERVER:\\SQL$env:COMPUTERNAME

我只是想修改我只需要運行

調用-Sqlcmd | 出空

這似乎然后將程序集完全加載到內存中,之后一切正常。

所以我將此添加到我的腳本中:

# SQL cmdlets below need some dll imports from system
# These do not get loaded sometime when running under an non-admin account (Cannof find a provider with the name 'SqlServer')
# Running this dummy command seems to load all needed dlls
# Also see: https://www.sqlservercentral.com/forums/topic/unable-access-sql-provider-in-powershell-without-running-an-invoke-sqlcmd-first
Invoke-Sqlcmd | Out-Null

似乎有價值的信息不應該丟失,所以我想我會在谷歌搜索該特定錯誤時將其發布在最高的 SO 中。

有人可能會爭辯說,安裝模塊而不是這種虛擬方法會更干凈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM