2013-05-17 29 views
4

我使用加載以下SQL Server 2008 R2的PowerShell插件如何在不啓用命名管道的情況下使用invoke-sqlcmd?

Add-PSSnapin SqlServerCmdletSnapin100 
Add-PSSnapin SqlServerProviderSnapin100 

我那麼用戶調用,這樣的SQL腳本:

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

我使用的方法來運行一些升級我們數據庫上的腳本。我很開心地在我們的開發測試環境中使用它,但之後我們在生產環境中嘗試了它,結果發現我們在服務器配置上有所不同。在我們的prod服務器上,出於安全原因命名管道被禁用(顯然是蠕蟲攻擊),我們的DBA不想啓用。

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

INFO ERROR: Invoke-Sqlcmd : A connection was successfully established with the server, but then an error occurred during the login process. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)

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

+1

如果你具體弄清楚,請更新。我也很好奇。 – granadaCoder

+0

'invoke-sqlcmd -Query「select bar from bar」-HostName dbserver -Database fakedb' results invoke-sqlcmd:建立到SQL Server的連接時發生網絡相關或實例特定的錯誤。該服務器未找到或不是 可訪問。驗證實例名稱是否正確,並將SQL Server配置爲允許遠程連接。 (提供程序:命名管道提供程序,錯誤: 40 - 無法打開與SQL Server的連接) 但由於某種原因,此作品: 'invoke-sqlcmd -Query「select bar from bar」-serverinstance dbserver -Database fakedb' –

回答

1

這是一個有教養的猜測。但這裏有:

我認爲你必須通過使用註冊表來「覆蓋默認值」。現在

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,$_" } 

} 
+0

我得到的是,您可能需要在註冊表中爲「brvswidb1062」輸入一個與dbmssoccn鏈接以覆蓋默認命名管道的條目。 DSN練習通過一個GUI工具顯示了它的工作方式,而不是嘗試手動添加條目。 – granadaCoder

0

您可以使用前綴將連接方法更改爲實例名稱as for sqlcmd。在SQL Server 2012和PowerShell 4,這個工作對我來說:

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

以賀歲片的使用LPC(本地共享內存),用於TCP/IP而不是命名管道的反應類似,你也可以指定-ServerInstance tcp:foodb

相關問題