2

我正在玩 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()成员的所有对象类型?

谢谢

4

1 回答 1

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)}}
于 2013-08-23T19:41:47.840 回答