Por predefinição, os objectos obtidos após a execução de um comando (ou de um conjunto de comandos enviados através de uma pipeline) são normalmente apresentados em tabela. Tal deve-se ao facto de, por predefinição, esses objectos serem enviados para o cmdlet Format-Table. Para além deste, existem ainda outros cmdlets que podem ser usados para definir o tipo de formatação que será aplicado a um objecto:
- Format-List: como o próprio nome indica, este cmdlet é responsável por apresentar as propriedades de um objecto em formato lista;
- Format-Wide: ao contrário do que normalmente acontece, este cmdlet permite apresentar as propriedades em colunas apresentadas paralelamente;
- Format-custom: permite definir o aspecto da apresentação das propriedades dos elementos obtidos
Para analisarmos a diferença entre os vários cmdlets, vamos começar por analisar o que acontece quando executamos o cmdlet get-childitem num directório.
MSH c:\>gci
Directory: Microsoft.Management.Automation.Core\FileSystem::C:\Documents an
d Settings\labreu
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 26-03-2006 15:47 0 a.txt
-a--- 20-03-2006 20:07 86 default.pls
-a--- 21-03-2006 20:02 353 intlname.ols
-a--- 12-03-2006 23:57 839 log.msh
d---- 12-03-2006 23:59 .netbeans
Como tínha afirmado, por predefinição é usado o cmdlet format-table, que apresenta os dados em formato tabela. Se desejarmos utilizar uma formatação em lista, podemos executar o seguinte comando:
MSH c:\>gci | fl
Directory: Microsoft.Management.Automation.Core\FileSystem::C:\Documents an
d Settings\labreu
Name : a.txt
Length : 0
CreationTime : 06-03-2006 21:45:28
LastWriteTime : 26-03-2006 15:50:35
LastAccessTime : 26-03-2006 15:50:35
VersionInfo :
Name : default.pls
Length : 86
CreationTime : 16-03-2006 22:41:32
LastWriteTime : 20-03-2006 20:07:08
LastAccessTime : 20-03-2006 20:07:08
VersionInfo :
…
Como é possível verificar, nestes casos as propriedades de cada objecto são apresentadas uma por linha. Se por acaso recorrermos ao cmdlet format-wide, os resultados obtidos serão os seguintes:
Directory: Microsoft.Management.Automation.Core\FileSystem::C:\Documents an
d Settings\labreu
a.txt aa.txt
default.pls intlname.ols
log.msh [.netbeans]
[Contacts] [Cookies]
[Desktop] [Favorites]
[My Documents] [Start Menu]
[UserData] [WINDOWS]
Finalmente, temos ainda o cmdlet format-custom. Este cmdlet apresenta os dados num formato não tradicional. Normalmente, limitam-se a apresentar os dados de forma a simular as hierarquias de classes envolvidas. O exemplo seguinte ilustra a utilização simples deste comando:
MSH C:\> (gci)[0] | fc
class FileInfo
{
LastWriteTime =
class DateTime
{
DateTime = domingo, 26 de Mar?o de 2006 15:53:54
Date =
class DateTime
{
DateTime = domingo, 26 de Mar?o de 2006 0:00:00
Date =
class DateTime
{
DateTime = domingo, 26 de Mar?o de 2006 0:00:00
Date =
class DateTime
{
DateTime = domingo, 26 de Mar?o de 2006 0:00:00
Date =
class DateTime
{
DateTime = domingo, 26 de Mar?o de 2006 0:00:00
Date = 26-03-2006 0:00:00
Day = 26
DayOfWeek = Sunday
DayOfYear = 85
Hour = 0
Kind = Local
Millisecond = 0
Minute = 0
Month = 3
Second = 0
Ticks = 632789280000000000
TimeOfDay = 00:00:00
Year = 2006
}
Day = 26
DayOfWeek = Sunday
DayOfYear = 85
Hour = 0
Kind = Local
Millisecond = 0
Minute = 0
Month = 3
Second = 0
Ticks = 632789280000000000
TimeOfDay =
class TimeSpan
{
Ticks = 0
Days = 0
Hours = 0
Milliseconds = 0
Minutes = 0
Seconds = 0
TotalDays = 0
TotalHours = 0
TotalMilliseconds = 0
TotalMinutes = 0
TotalSeconds = 0
}
Year = 2006
}
Day = 26
DayOfWeek = Sunday
DayOfYear = 85
Hour = 0
Kind = Local
Millisecond = 0
Minute = 0
Month = 3
Second = 0
Ticks = 632789280000000000
TimeOfDay =
class TimeSpan
{
Ticks = 0
Days = 0
Hours = 0
Milliseconds = 0
Minutes = 0
Seconds = 0
TotalDays = 0
TotalHours = 0
TotalMilliseconds = 0
TotalMinutes = 0
TotalSeconds = 0
}
Year = 2006
}
Day = 26
DayOfWeek = Sunday
DayOfYear = 85
Hour = 0
Kind = Local
Millisecond = 0
Minute = 0
Month = 3
Second = 0
Ticks = 632789280000000000
TimeOfDay =
class TimeSpan
{
Ticks = 0
Days = 0
Hours = 0
Milliseconds = 0
Minutes = 0
Seconds = 0
TotalDays = 0
TotalHours = 0
TotalMilliseconds = 0
TotalMinutes = 0
TotalSeconds = 0
}
Year = 2006
}
Day = 26
DayOfWeek = Sunday
DayOfYear = 85
Hour = 15
Kind = Local
Millisecond = 198
Minute = 53
Month = 3
Second = 54
Ticks = 632789852341986720
TimeOfDay =
class TimeSpan
{
Ticks = 572341986720
Days = 0
Hours = 15
Milliseconds = 198
Minutes = 53
Seconds = 54
TotalDays = 0,662432855
TotalHours = 15,89838852
TotalMilliseconds = 57234198,672
TotalMinutes = 953,9033112
TotalSeconds = 57234,198672
}
Year = 2006
}
Length = 826948678
Name = a.txt
}
Agora que já sabemos como formatar um objecto, é chegada a altura de vermos como podemos influenciar os dados apresentados pelos cmdlets anteriores. O Monad carrega as definições relativas às propriedades que devem ser apresentadas para um tipo a partir de ficheiros *format.mshxml. Quando criamos um novo tipo, devemos proceder também à criação de um novo ficheiro desigando de tipo.format.mshxml (onde tipo é o nome do novo tipo criado). No interior, podemos definir uma ou mais views. São estes os elementos responsáveis pela correcta apresentação das propriedades. A documentação que acompanha o Monad apresenta toda a informação relativa a este tipo de elementos e pode ser consultada aqui.
Após analisar a documentação do Monad, penso que cheguei ao fim dos posts acerca desta nova shell. Não por já não haver nada a dizer acerca desta shell, mas sim porque os documentos fazem uma boa descrição de todas as funcionalidades disponibilizadas pela shell!
Por outras palavras, se voltar a escrever sobre Monad será, concerteza, para apresentar um outro item que ache mais importante, redireccionando sempre o leitor para a documentação de forma a obter mais dados.
O fim desta série de posts sobre Monad assinala o começo de outra: está na hora de escrever um pouco sobre ATLAS!
posted on Thursday, April 06, 2006 8:18 PM