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