在名为NewDB.ps1
的powershell脚本中考虑以下代码:
param ($i, $d)
Function New-Database
{
param ($instance, $name)
$db = New-Object Microsoft.SqlServer.Management.Smo.Database ($instance, $name)
try { $db.Create() }
catch [Exception] { $_.Exception | Format-list | Out-String ; exit }
$db.CreateDate.DateTime
$db.DatabaseOptions.RecoveryModel
return $db
}
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$sqlServer = new-Object Microsoft.SqlServer.Management.Smo.Server($i)
[Microsoft.SqlServer.Management.Smo.Database]$myDB = New-Database $sqlServer $d
我收到类型转换错误:
PS C:\Users\moomin\Documents> .\NewDB.ps1 "(local)" "testDB"
Cannot convert the "System.Object[]" value of type "System.Object[]" to type
"Microsoft.SqlServer.Management.Smo.Database".
At C:\Users\moomin\Documents\NewDB.ps1:21 char:1
+ [Microsoft.SqlServer.Management.Smo.Database]$myDB = New-Database $sqlServer $d
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : ConvertToFinalInvalidCastException
如何将对象作为
Microsoft.SqlServer.Management.Smo.Database
对象从函数中返回?我需要在功能之外使用它做更多的事情。更新
当然,感谢@mjolinor,它完全可以像我现在想要的那样工作。顺便说一句,它也可以在单独的模块中与
New-Database
一起正常工作(我实际上是如何实现的)。param ($i, $d)
Function New-Database
{
param ($instance, $name)
$db = New-Object Microsoft.SqlServer.Management.Smo.Database ($instance, $name)
try { $db.Create() }
catch [Exception] { $_.Exception | Format-list | Out-String ; exit }
$db
}
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$sqlServer = new-Object Microsoft.SqlServer.Management.Smo.Server($i)
$myDB = New-Database $sqlServer $d
$myDB.CreateDate.DateTime
$myDB.DatabaseOptions.RecoveryModel
最佳答案
函数应该仅返回一种类型的对象,并且它输出的任何内容都是返回的一部分,而不仅仅是Return关键字之后的内容,因此您的返回将是这3个对象的数组(这就是为什么说您的返回类型是Object [])
$db.CreateDate.DateTime
$db.DatabaseOptions.RecoveryModel
$db
如果只需要$ db,则仅返回$ db。
关于powershell - 为什么Powershell不保留 native 类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21713411/