我正在玩SMO并尝试使用它将数据库所有者更改为sa
。代码是
# To simplify our discussing, let's say we have a function Get-SMOServer
$s = Get-SMOServer -Instance myserver\myinstance
$s.databases | ?{$_.owner -ne "sa"} | %{$_.setowner("sa", $true)}
此时,当我从SSMS检查数据库所有者时,所有者已经更改。但是,如果我从$s.databases
检查它,我仍然会得到旧数据,直到我执行以下操作:
$s.databases | %{$_.refresh()}
然后我可以从$s.databases
获得正确的结果。
我检查了SMO对象,发现其中很多都有refresh()
函数。我的问题是,每次修改某个对象时,我应该调用refresh()
吗?如何查找具有refresh()
成员的所有对象类型?
由于
答案 0 :(得分:0)
您可以查看SMO程序集。我正在使用2008 R2附带的SMO:
$assm = add-type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" -EA Stop -PassThru
$assm | %{$hasRefreshMethod = $null; $hasRefreshMethod = $_.GetMethods() | ?{$_.name -eq "Refresh"}; new-object psobject -property @{Name=$_.Name; HasRefreshMethod=$($hasRefreshMethod -ne $null)}}