Under the Hood – Como funciona um built in .net cmdlet no PowerShell ?


Você que como eu é um apaixonado por PowerShell .

Que ja passou noites em claro montando advanced functions.

Que já perdeu vários finais de semana estudando e testando coisas que você não tinha a minina idéia por onde começar ? mas no final conseguiu fazer

Então meu amigo, este post é para você agora perder mais finais de semana hahahahah  (pam pam param pam param pam param – Marcha Imperial)

Você nunca se perguntou como funciona um Get-Service ? Como ele foi feito ? O que ele faz ? Eu já.E tem uma maneira bem simples até da gente ver isso.

Basta você ter um .net decompilador e diassembler. Existem alguns no mercado, mas eu tenho usado o JetBrains dotPeek.

Vamos lá, vamos dizer que você queira saber como funciona o Get-Service.

 

1 –  Descobrir qual sua dll . Pra isso é simples, basta usar o Get-Command e exibir a propriedade DLL.

(get-command Get-Process).dll

A exbição será algo como : (depende de qual versão da .net esta instalada na sua máquina, pois esta dll esta no GAC)

image

Já sabemos que é a Microsoft.PowerShell.Commands.Management.dll

 

2 – Usar o Trace-Command para saber a chamada do método na DLL : Vamos escolher um serviço na maquina, no meu caso ALG (pode ser qq um, somente para o cmdlet retornar informação)

trace-command -Name CommandDiscovery -PSHost -Expression {Get-service ALG }

E será exibido :

image

Já sei que o nome é GetServiceCommand e fica na Microsoft.PowerShell.Commands. Agora é só abrir o dotPeek e ir em open from GAC :

 

image

Uma janela com todos os assemblies registrados no GAC serão exibidos e você digita o nome da dll (sem o .dll)

 

image

 

Clique no Assembly e ele será  será carregado  . Agora é somente abrir a tree-view a esquerda com procurando por Windows.PowerShell.Commands (passo 2 ali em cima eu achei esta informação)

Quando achar, abra ela e procure pela chamda GetServiceCommand . Clique nele e você terá aberto a caixa de pandora 🙂 A sua direita estará o codigo fonte dele .

 

image

 

Eu fiz isso porque precisava entender como é feito um processo no azure pelos cmdlets do Windows Azure, para automatizar um processo manual (mesmo pelo cmdlet ainda é manual, abre um browser e nào tem`nenhum parametro -nobrowser)

 

Hoje Realmente to me sentindo Darth Laertus !!!! KKK

 

Abs pessoal !!!!

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, Powershell, Virtual Pass BR. Bookmark the permalink.

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