我想我刚刚发现了 SQL Server SMO 和 PowerShell 中最酷的东西。我被要求编写一个脚本来查找 SQL Server 实例中每个对象的所有者。我在 Technet/MSDN SQL Server 库上找到了一个脚本,但认为使用 PowerShell 获取它并能够同时访问网络上的所有实例会容易得多。
好吧,在玩耍时,我在数据库类中遇到了这个方法:Discover()
所以如果你使用这段代码:
#Load SMO
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Smo') | Out-Null
$srv = New-Object 'Microsoft.SqlServer.Management.Smo.Server' "your instance name"
$db = $srv.Databases
$db.Discover()
当你运行最后一行时,如果你连接到一个有很多数据库的实例,你将看到你的控制台开始滚动文本,就像在药物上一样。
好吧,我去做了 $db | gm
,它几乎向您展示了 SMO 对象中可用的每个 TypeName。
现在我的问题。我可以执行$db.Discover() | Select Name, Owner
,它会开始吐出所有带有名称和所有者值的东西。
我怎样才能得到返回对象的对象类型(比如它是触发器、模式、表等)?到目前为止我似乎无法弄清楚。
编辑
到目前为止,我发现它似乎只能在数据库级别“发现”东西。显然在我的控制台缓存中的某处我已经设置 $db
了类似的东西$db = ($srv.Databases).Item("aDatabase")
,因为这是您可以调用该方法的唯一方式。不过,仍在寻找提取对象名称、类型和所有者的方法。
尝试这个