2015-08-18 50 views
1

我想在使用Microsoft.SqlServer.SMO的PowerShell中設置數據庫名稱。當我用下面的錯誤文本執行我的腳本運行錯誤:powershell set database IndexOutOfRangeException

format-default : Index was outside the bounds of the array. 
    + CategoryInfo   : NotSpecified: (:) [format-default], IndexOutOfRangeException 
    + FullyQualifiedErrorId : System.IndexOutOfRangeException,Microsoft.PowerShell.Commands.FormatDefaultCommand 

服務器設置如下

$srv = New-Object "Microsoft.SqlServer.Management.SMO.Server" $server 
$srv.ConnectionContext.LoginSecure=$false; 
$srv.ConnectionContext.set_Login("login"); 
$srv.ConnectionContext.set_Password("password") 

$srv.Databases | Select name, 顯示我正確的數據庫,但設置數據庫時,

$db = $srv.Databases[$database] 

錯誤被拋出。

這個腳本可以在其他sqlservers中工作。 針對此問題的任何解決方案?

+0

一)什麼是'$ database'設置爲沒有項目? b)'$ srv.Databases.GetType()'的輸出是什麼? – arco444

+0

PS U:\> $ srv.Databases.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False DatabaseCollection Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase –

+0

PS U:\> $ database CRD_DEV –

回答

0

它看起來像腳本拋出錯誤的服務器上不存在數據庫「CRD_DEV」。 這或用戶無權訪問該數據庫。

IndexOutOfRangeException被拋出,因爲在$srv.Databases匹配「CRD_DEV」

+0

當我列出特定服務器中的數據庫時,它顯示了master,model,msdb和tempdb中的CRD_DEV。奇怪的是,我可以使用與我的腳本中使用的憑據相同的憑據在MS SQL Server Managent Studio中登錄。 –

+0

登錄與打開數據庫不同。您可以擴展數據庫並在MS SQL Server Management Studio中的表上進行選擇嗎? – Rubanov

+0

是的,沒問題,就像一個魅力。 –

相關問題