Acho que acabei de encontrar a coisa mais legal com SQL Server SMO e PowerShell. Pediram-me para criar um script para encontrar o proprietário de cada objeto em uma instância do SQL Server. Encontrei um script na biblioteca Technet/MSDN SQL Server, mas pensei que seria muito mais fácil obtê-lo com o PowerShell e ser capaz de atingir todas as instâncias da rede de uma só vez.
Bem, brincando, encontrei este método dentro da classe Database: Discover ()
Então, se você usar este código:
#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()
Ao executar a última linha, você verá seu console começar a rolar o texto como se estivesse usando drogas, se você se conectar a uma instância com muitos bancos de dados.
Bem, eu fui fazer $db | gm
e mostra praticamente todos os TypeName disponíveis nos objetos SMO.
Agora minha pergunta. Posso executar $db.Discover() | Select Name, Owner
e ele começará a cuspir tudo com um nome e um valor de proprietário.
Como eu também poderia obter o tipo de objeto do objeto que está sendo retornado (como se fosse um gatilho, esquema, tabela, etc)? Eu não consigo descobrir isso até agora.
EDITAR
Até agora, acho que parece apenas "descobrir" coisas no nível do banco de dados. Aparentemente, em algum lugar do cache do console, eu havia definido $db
algo como $db = ($srv.Databases).Item("aDatabase")
, porque essa é a única maneira de chamar o método. Ainda procurando uma maneira de extrair o nome, o tipo e o proprietário do objeto.
Tente isso