web-dev-qa-db-ja.com

SQL Server SMOメソッド「Discover()」

SQL ServerSMOとPowerShellで最もクールなものを見つけたと思います。 SQL Serverのインスタンス内のすべてのオブジェクトの所有者を見つけるために、スクリプトをまとめるように依頼されました。 Technet/MSDN SQL Serverライブラリでスクリプトを見つけましたが、PowerShellを使用してスクリプトを取得し、ネットワーク上のすべてのインスタンスに一度にアクセスできる方がはるかに簡単だと思いました。

よく遊んでいると、Databaseクラス内でこのメソッドに出くわしました: 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")のようなものに設定したようです。これが、メソッドを呼び出す唯一の方法だからです。ただし、オブジェクト名、タイプ、および所有者を引き出す方法をまだ探しています。

6
user507

これを試して

$db.Discover() | select @{Name="Type";Expression={$_.GetType().Name}};
7
Ben Thul