2014-02-22 43 views
0

爲什麼這項工作:新對象不實例SMO

$cmd = new-object System.Data.OleDB.OleDbCommand 

,爲什麼不這樣:

$sql = new-object Microsoft.SqlServer.SMO 

我怎麼知道哪些類需要這個「特殊」的待遇?

+0

我會假設它不僅僅是你拼錯'SqlServer'? –

+0

不,對不起,我只是拼錯... – Purclot

+1

你可以編輯你的問題,包括當你嘗試時實際發生了什麼? –

回答

1

SMO不是一個類,它是一個命名空間。您需要在名稱空間中實例化一個對象。例如,如果你想要一個服務器,你會這樣做:

$server = new-object Microsoft.SqlServer.Management.Smo.Server "yourServer"; 
+0

嗨Ben, 謝謝。遵循你的建議,我得到: new-object:找不到類型[Microsoft.SqlServer.Management.Smo.Server]:確保包含此類型的程序集已加載 。這意味着:一些組件會立即加載,有些則不會。 完美的混沌:使用PS 3.0和:[System.Reflection.Assembly] :: LoadWithPartialName('Microsoft.SqlServer.SMO')已棄用:現在應該使用什麼? Purclot – Purclot

+0

'Add-Type'是加載程序集的「新」方式,但對於SMO,它往往會導致錯誤,因爲它會嘗試加載錯誤的程序集。當使用'Add-Type'時,你應該指定獲取正確版本的路徑。請參閱http://www.maxtblog.com/2011/07/sql-server-smo-loading-assemblies-gotcha%E2%80%99s/。就個人而言,我仍然使用'LoadWithPartialName()'。它仍然可以在PS v4中運行,並且需要一些時間才能使網絡中的系統使用powershell或.net版本,而此版本不再受支持。 :) –

+0

我找到的最簡單的方法是啓動SQL Server安裝附帶的sqlps。而「最簡單」的意思是「自從爲你加載模塊後,你不必做任何事情」。 –