簡體   English   中英

如何在不啟用命名管道的情況下使用invoke-sqlcmd?

[英]How can I use invoke-sqlcmd without enabling named pipes?

我使用的腳本加載以下SQL Server 2008 R2 powershell插件

Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100

然后我像這樣用戶調用-sql:

Invoke-Sqlcmd -Query "select * from table" -ServerInstance xyz -Database abc -username xxxxxx -password yyyyyyy

我正在使用方法在我們的數據庫上運行許多升級腳本。 我很高興在我們的dev \\ test環境中使用它,但后來我在生產中嘗試了它,結果發現我們在服務器配置上有所不同。 在我們的prod服務器上,由於安全原因(顯然是蠕蟲攻擊)而禁用了命名管道,而我們的DBA不想啟用。

這是我得到的錯誤,研究表明它是一個命名管道問題 - 當我啟用它們時開始工作。

INFO ERROR:Invoke-Sqlcmd:與服務器成功建立連接,但在登錄過程中發生錯誤。 (提供者:共享內存提供者,錯誤:0 - 管道的另一端沒有進程。)

有誰知道是否有某種方法來切換我的腳本,以便它不需要命名管道? 或者這是invoke-sqlcmd的內置連接方法,我需要更改大頭釘(如果有任何建議)。

這是一個有根據的猜測。 但是這里:

我認為你必須通過使用注冊表“覆蓋默認值”。

http://support.microsoft.com/kb/229929

現在,最簡單的方法(IIRC)是通過你的

Control Panel / ODBC Data Source / System DSN.

添加“Sql Server”。 (不是本地客戶端)。

最重要的按鈕是“客戶端配置”,您可以在其中選擇命名管道或tcp / ip。
嘗試DSN方法,完成向導后,查看下面的注冊表項

HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\ConnectTo

.........

你可能看看這個:

http://sev17.com/2012/11/05/cloning-sql-servers-to-a-test-environment/

尋找這個代碼。

sqlcmd -S myCMServerInstance -d msdb -Q $query -h -1 -W |
foreach { Set-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftMSSQLServerClientConnectTo' -Name $($_ -replace 'TEST') -Value "DBMSSOCN,$_" }

}

您可以使用前綴將實例名稱的連接方法更改為sqlcmd 使用SQL Server 2012和Powershell 4,這對我有用:

Invoke-Sqlcmd -Query $sqlQuery -serverinstance "lpc:localhost" -Database "myDatabase"

類似於Surreal對使用LPC(本地共享內存)的響應,對於TCP / IP而不是命名管道,您還可以指定-ServerInstance tcp:foodb

暫無
暫無

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

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