LA.Net
Reflexões sobre C#, .Net e programação em geral

Como seria de esperar, o Monad permite-nos reutilizar os comandos executados previamente já que consegue mantê-los em histórico. Para além de suportar os atalhos tradicionais associados  ao DOSKEY (por exemplo, podemos navegar ao longo dos comandos executados durante uma sessão através das teclas arrow up e arrow down), o monad introduz ainda um conjunto de cdmlets capazes de aumentar as potencialidades fornecidas pelo uso de históricos. Ao longo deste post, vamos falar acerca de dois cmdlets e respectivas potencialidades: get-history e invoke-history.

Quando executado sem atributos, o cmdlet get-history limita-se a apresentar uma lista de comandos executados previamente durante a sessão actual do Monad. Por exemplo, a execução desta instrução na minha máquina retorna o seguinte:

MSH c:\>get-history

Id CommandLine                                                              
  -- -----------                                                              
   1 get-alias ft                                                             
   2 get-alias ft                                                             
   3 get-command *histoty*                                                    
   4 get-command *history*                                                    
   5 get-help get-history                                                     
   6 get-history                                                              
   7 get-history 4                                                            
   8 get-history 4, 5                                                         
   9 get-history 3 -count 2                                                   
  10 get-history
              

Este cmdlet pode receber dois parâmetros: id e count. O primeiro, designado de id, permite definir os ids dos comandos que devem ser retornados. Por exemplo, a instrução seguinte retorna as instruções com os ids 7 e 8:

MSH c:\>get-history -id 7,8

7 get-history 4                                                             
8 get-history 4, 5

Por outro lado, o parâmetro count serve para indicar o número de comandos que deve ser retornado do histórico. O comando seguinte devolve os últimos dois comandos executados na sessão actual:

MSH c:\>get-history -count 2

9 get-history 3 -count 2                                                    
10 get-history
          

Como seria de esperar, podemos combinar ambos os atributos. Por exemplo, a instrução seguinte retorna os 2 últimos comandos a partir do comando 7 (note-se que a contagem é feita de forma decrescente):

MSH c:\>get-history -id 7 -count 2

6 get-history                                                               
7 get-history 4
  

Convém referir que o cmdlet get-history pode devolver um ou mais elementos do tipo HistoryInfo (o cmdlet devolve um array quando têm de devolver mais do que um elemento). Agora que já sabemos o tipo de elemento retornado pelo cmdlet, podemos efectuar um conjunto de operações mais avançadas através do uso de pipes. Por exemplo, a instrução seguinte é capaz de apresentar apenas todos os comandos cuja propriedade CommandName possui o valor get-*:

MSH c:\>get-history | where { $_.CommandName -like “get*”}

Id CommandLine                                                              
  -- -----------                                                              
  17 get-history                                                              
  18 get-history                                                              
  19 get-history                                                              
  20 get-history                                                              
  21 get-history                                                              
  22 get-history > a.txt                                                      
  24 get-help get-history                                                     
  25 get-history -id 7,8                                                      
  26 get-history -count 2                                                     
  27 get-history -id 7 -count 2                                               
  28 get-history -id 7 | get-member                                           
  33 get-history -id 7, 8 | get-member                                        
  40 get-help get-help get-history                                            
  41 get-help get-history
                 

Antes de terminarmos a descrição do cmdlet get-history, temos de referir que, no dia a dia, a utilização deste cmdlet será feita praticamente sempre através do alias history.

O cmdlet invoke-history complementa o cmdlet get-history, já que permite executar uma acção mantida em histórico. Este cmdlet pode receber um parâmetro designado de ID que é usado para identificar o comando que deve voltar a ser executado (a execução deste cmdlet sem nenhum parâmetro repete o último comando executado). O exemplo seguinte ilustra como podemos executar todos os comandos recuperados no exemplo anterior:

MSH c:\>get-history | where { $_.CommandName -like “get*”} | foreach { invoke-command $_.id}

Para finalizar, duas observações: a primeira serve para chamar a atenção para o facto do número de comandos mantidos em histórico ser controlado pela variável $MaximumHistoryCount (que, por predefinição, possui o valor 64). Se quisermos manter mais (ou menos) comandos no buffer do histórico, então temos de atribuir um valor a esta variável. A segunda nota prende-se com o facto do conteúdo do buffer (ou seja, o histórico dos comandos) apenas ser mantido durante a sessão de trabalho (se encerramos o Monad, os comandos executados durante essa sessão são apagados do histórico).

posted on Monday, February 20, 2006 10:36 PM
Comments
No comments posted yet
Title  
Name  
Url
Box Code
Protected by FormShield
Comments