Trabalhando com Custom Tables no Powershell


 

Essa solução foi bem legal.

Um amigo me chamou no msn e me disse :

“Laerte,vi a dica que você deu via twitter pro Jorge Segarra (twitter | blog) e saiu no SQLServerPedia e quero ver se você pode me ajudar. Preciso mandar um resultado de uma proc para um XML todo dia, como está lá no artigo, mas o resultado vem de uma procedure de terceiros e eu preciso inserir uma descrição de um flag que está somente com o código. E eu não posso mexer na procedure por ser de terceiro. Tem como me ajudar ?”

1 – Problema

Adicionar mais uma coluna no retorno da proc

2 – Problema

Esta coluna é a descrição de uma outra coluna que vem no retorno da proc. Um flag.

3 – Problema

Não pode mexer na proc.

Parece complicado né..pois intaum vamos resolver com uma linha de comando powershell ?

Vamos criar uma tabelinha e a proc simulando o problema dele :

   1: Create table Atormentados ( codigo int ,-- código do peão,
   2:                             nome varchar(100), -- nome do atormentado,
   3:                             estadoCivil char(1) -- estado civil FLAG..pode ser S-Solteiro D-Divorciado E-Desquitado C-Casado U-União Estavel
   4:                            )
   5: go
   6: -- Inserimos alguns Atormentados
   7: insert into Atormentados values (1,'Laerte Junior','S')
   8: insert into Atormentados values (2,'Zézinho do Manicomio','D')
   9: insert into Atormentados values (3,'Mané Lunatico','E')
  10:  
  11: --Criamos a proc
  12: go
  13:                      
  14: create procedure usp_TrazInfoDoAtormentado
  15:  
  16: as
  17:  
  18: select    codigo,
  19:         nome,
  20:         estadocivil
  21: from    Atormentados

Se executarmos a proc, veremos o Flag que ele precisa exibir como descrição ou seja,

estadoCivil char(1) — estado civil FLAG..pode ser S-Solteiro D-Divorciado E-Desquitado C-Casado U-União Estavel

image

Óbvio que a proc dele era miuto mais complexa que um select, mas fiz isso somente para exemplificar.

Poderiamos crar uma função para passar o nome ddo servidor e database, mas no caso dele era um processo fixo que iria rodar todo dia, sempre tirando deste server, database e proc. Caso alguem queira um exemplo de como fazer esta função com parametros, ping me please !!!

Mas. vamos ao código ?

Primeiro, somente usando uma custom table para adicionar este novo campo. Reparem que tenho uma função dentro da principal que tem a descrição dos flags.

Dentro da custom table, eu chamo ela passando como parametro o valor do campo estadocivil.

   1: function get-Atormentados
   2: {
   3:           
   4:     Begin
   5:     {
   6:     
   7:         function ConvertTo-FlagCaption($Value)
   8:         {
   9:             switch($value)
  10:             {
  11:                 "S"   {"Solteiro";break}
  12:                 "D"   {"Divorciado";break}
  13:                 "E"   {"Desquitado";break}
  14:                 "C"   {"Casado";break}
  15:                 "U"   {"União Estável";break}
  16:  
  17:             default {"Desconhecido";BREAK}
  18:             }
  19:         }
  20:  
  21:     }
  22:           
  23:     Process
  24:     {
  25:     
  26:         invoke-sqlcmd -server $env:computername -database tempdb -Query "usp_TrazInfoDoAtormentado" |
  27:             Select-Object     Codigo,
  28:                             Nome,
  29:                             @{Expression={ConvertTo-FlagCaption -value $_.estadocivil};Label = "Estado Civil"}
  30:         
  31:     }
  32: }

Executando olhem o resultado : get-atormentados

image

Agora precisa mandar pro XML..vai ser difiiiiiiiiiiiiiiiiiiiiiiiiiiicil isso…Adiconamos o cmdlet ConvertTo-Xml e a propriedadade save. na linha principal altere para :

   1: Process
   2: {
   3:  
   4:     (invoke-sqlcmd -server $env:computername -database tempdb -Query "usp_TrazInfoDoAtormentado" |
   5:         Select-Object     Codigo,
   6:                         Nome,
   7:                         @{Expression={ConvertTo-FlagCaption -value $_.estadocivil};Label = "Estado Civil"} | ConvertTo-Xml -NoTypeInformation).save("c:\temp\ResultXml.Xml")
   8:     
   9: }

 

Pronto e se formos no arquibo xml gerado no c:\temp\resultxml.xml, veremos :

image

 

Pra quem quiser ler mais sobre la vai :

Creating Custom Tables

ConvertTo-XML

article on the ConvertTo-XML Cmdlet

 

uhuu..mas fácil impossível

Powershell ROCKS !!!

“Dead Man’s Party
I’m all dressed up with nowhere to go
Walkin’ with a dead man over my shoulder (2x)
Waiting for an invitation to arrive
Goin’ to a party where no one’s still alive (2x)
(Chorus)
I was struck by lightning
Walkin’ down the street
I was hit by something last night in my sleep
It’s a dead man’s party
Who could ask for more
Everybody’s comin’, leave your body at the door
Leave your body and soul at the door
Don’t run away it’s only me
All dressed up with nowhere to go
Walkin’ with a dead man
Waitin’ for an invitation to arrive
With a dead man … Dead Man”

Dead Man’s Party

Oingo Boingo

About Laerte Junior

Laerte Junior Laerte Junior is a SQL Server specialist and an active member of WW SQL Server and the Windows PowerShell community. He also is a huge Star Wars fan (yes, he has the Darth Vader´s Helmet with the voice changer). He has a passion for DC comics and living the simple life. "May The Force be with all of us"
This entry was posted in Algo que Esqueci de Categorizar. Bookmark the permalink.

2 Responses to Trabalhando com Custom Tables no Powershell

  1. Felipe says:

    Muito bom Laerte, nao conhecia as Custom Tables.Perfeito, parabéns cara..

  2. Laerte says:

    Fala Felipão man….bem legal esse recurso né …Abraços meu amigo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s