2016-10-10 53 views
0
$primaryReplica = $configFile.Config.PrimaryReplica 
$Database = $configFile.Config.DatabaseName 
$SqlServer = $configFile.Config.ServerName 

$machineName = gc env:computername 

if ($machineName -eq $primaryReplica) 
{ 
    Import-Module "sqlps" -DisableNameChecking 

    cd "SQLSERVER:\SQL\$SqlServer\Default\Databases" 
    $DatabaseInstance = Get-Item "$Database" -ErrorAction SilentlyContinue 
    if ($DatabaseInstance -eq $null) 
    { 
     # Create DB 
     $DatabaseInstance = New-Object Microsoft.SqlServer.Management.SMO.Database 
     $DatabaseInstance.Parent = Get-Item "SQLSERVER:\SQL\$SqlServer\Default" 
     $DatabaseInstance.Name = $Database 
     $DatabaseInstance.RecoveryModel = "Full" 
     $DatabaseInstance.Create() 
    } 

我希望使用PowerShell腳本在SQL Server中創建數據庫。 上面的代碼正在生成以下錯誤:無法使用PowerShell在SQL Server中創建數據庫

Exception setting "Parent": "Cannot convert the "[PAAROR]" value of type "Microsoft.SqlServer.Management.Smo.Server" to type "Microsoft.SqlServer.Management.Smo.Server"."

+2

你可以嘗試傳遞''PAAROR「'而不是'」[PAAROR]「嗎? –

+0

我試過只有 – priya

回答

0

隔離問題,通過驗證可以使用$SqlServer實例名被實例化的對象Server開始。然後進行數據庫創建:

$primaryReplica = $configFile.Config.PrimaryReplica 
$Database = $configFile.Config.DatabaseName 
$SqlServer = $configFile.Config.ServerName 
... 
    if ($DatabaseInstance -eq $null) 
    { 
     # Create DB 
     $SqlServerInstance = New-Object Microsoft.SqlServer.Management.SMO.Server $SqlServer 
     $DatabaseInstance = New-Object Microsoft.SqlServer.SMO.Database($SqlServerInstance, $Database) 
     $DatabaseInstance.Create() 
    } 
0

發生這種情況是因爲您從不同程序集中獲取衝突類型。這是我看到我的系統上:

> (get-item "SQLSERVER:\SQL\$server").GetType().Assembly.Location 

C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll

> [Microsoft.SqlServer.Management.Smo.Server].Assembly.Location 

C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\13.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll

sqlps是給我的類型從SQL Server 2014年,而是直接解決的類型是給我的類型從SQL Server 2016這是因爲當你導入sqlps時,兩者都被加載,這是......不幸的。

如果您使用的是SQL Server 2016之後的新模塊,則應該導入SqlServer而不是(然後您也可以忽略-DisableNameChecking)。如果您必須使用sqlps來實現向後兼容,我不確定適當的解決方案。作爲一個令人難以置信的醜陋解決方法,您可以明確指定類型名稱爲[Microsoft.SqlServer.Management.Smo.Database, Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91],但顯然如果提供者實際上不是此版本,則會中斷此類型名稱。

+0

(get-item「SQLSERVER:\ SQL \ $ server」)。GetType()。Assembly.Location命令給出C:\ Program Files文件(x86)\ Microsoft SQL Server \ 120 \ Tools \ PowerShell \ Modules \ sqlps \ Microsoft.SqlServer.Management.PSProvider.dll和[Microsoft.SqlServer.Management.Smo.Server] .Assembly.Location爲C:\ windows \ assembly \ GAC_MSIL \ Microsoft.SqlServer.Smo \ 11.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Smo.dll – priya

+0

我現在需要做什麼更改 – priya

相關問題