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

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
Comments
No comments posted yet
Title  
Name  
Url
Box Code
Protected by FormShield
Comments