【发布时间】:2015-05-05 08:34:25
【问题描述】:
我完全被这个弄糊涂了。我正在尝试使用 SMO 程序集编写一个简单的数据库还原脚本。
当我尝试添加设备并传递路径时,如下所示:
$backup.Devices.AddDevice($path, [Microsoft.SqlServer.Management.Smo.DeviceType]::File)
我得到一个奇怪的例外:
无法将参数“1”,值为:“File”,将“AddDevice”转换为“Microsoft.SqlServer.Management.Smo.DeviceType”:“无法将值“File”转换为“Microsoft.SqlServer.Management” .Smo.DeviceType”。错误:“来自 'Microsoft.SqlServer.Mana 的无效转换 gement.Smo.DeviceType' 到 'Microsoft.SqlServer.Management.Smo.DeviceType'。"" 在 D\Automatisk inläsning\AutoImportPowershell.ps1:41 char:26 + $backup.Devices.AddDevice
这是完整的脚本:
#ASSEMBLIES:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null
#HARDCODED VARIABLES:
$path = "C:\TestFolder\Bakfile.bak"
$server = "(local)"
$databas = "MyDatabase"
#SMO OBJECTS:
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($server)
$res = new-object Microsoft.SqlServer.Management.Smo.Restore
$backup = new-object Microsoft.SqlServer.Management.Smo.Backup
#STARTING RESTORE:
$backup.Devices.AddDevice($path, [Microsoft.SqlServer.Management.Smo.DeviceType]::File)
$backup.Database = $databas
$backup.Action = [Microsoft.SqlServer.Management.Smo.BackupActionType]::Database
$backup.Initialize = $TRUE
$backup.SqlBackup($srv)
$res.Devices.AddDevice($path, [Microsoft.SqlServer.Management.Smo.DeviceType]::File)
$res.Database = $databas
$res.NoRecovery = $TRUE
$res.SqlRestore($srv)
让我感到困惑的是错误消息本身 Invalid cast from 'Microsoft.SqlServer.Mana gement.Smo.DeviceType”到“Microsoft.SqlServer.Management.Smo.DeviceType”。对我来说,这些听起来像是同一类型!
【问题讨论】:
标签: sql powershell type-conversion smo database-restore