- DBA Shell 3: Instalando o SQL Server com Powershell
- DBA Shell 2: Obtendo mais informações sobre arquivos
- DBA Shell 1: Deletando arquivos de backup com powershell
Vão existir muitas situações em que você irá precisar analisar informações de um arquivo, como a data de criação, tamanho, etc. Para fazer isso com powershell é muito simples:
Get-ChildItem C:\SQLBackups\*.bak
Este comando é muito parecido com o já conhecido Remove-Item. Os parâmetros são semelhantes. Ele espera um caminho. Só que ao invés de remover arquivos, ele lista algumas informações padrões dos mesmos:
No powershell, os comandos retornam objetos. Objetos vem do conceito da orientação a objetos e precisaríamos de uma série exclusiva só pra explicar. Ao invés disso, vamos aprendendo com calma, com exemplos mais práticos.
Basicamente, os objetos são representações de alguma coisa, e eles possuem uma série de propriedades, que são valores que conseguimos acessar através de um nome.
O comando Get-ChildItem retorna uma lista com um ou mais objetos, que, dependendo dos parâmetros passados, podem ser arquivos, diretórios, chaves do registros, bancos sql, etc. Quando o resultado de um cmdlet é enviado para a tela, o powershell formata e exibe algumas propriedades por padrão (a formatação e as propriedades exibidas podem ser alteradas em arquivos de configuração).
No caso do Get-ChildItem, ele exibe o nome do arquivo, tamanho, e algumas outras informações. Você pode utilizar o cmdlet Select-Object para escolher quais as propriedades retornadas
Get-ChildItem C:\SQLBackups\*.bak | Select-Object Name
Vamos com calma:
- Get-ChildItem C:\SQLBackups\*.bak
Retorna uma lista de objetos, cada um representando os arquivos bak que estão em C:\SQLBackups - |
O pipe é utilizado para conectar o resultado de Get-ChildItem com o Select-Object. Assim, ao invés de jogar pra tela, cada objeto resultante de Get-ChildItem é enviado para o próximo comando, e esse próximo comando fará o que quiser com esses objetos. Um conjunto de dois ou mais comandos conectados pelo pipe é chamado de pipeline. - Select-Object Name
O cmdlet Select-Object é usado para escolher quais propriedades dos objetos serão retornadas. Nós especificamos o nome das propriedades através de parâmetros. No caso, Select-Object irá escolher as propriedades dos objetos resultantes de Get-ChildItem, que representam arquivos. O valor que passamos foi Name, que indica que estamos dizendo ao Select-Object que somente retorne a propriedade Name desses objetos, cujo o valor contém o nome e extensão do arquivo.
Há diversas propriedades existentes. Por exemplo, o seguinte comando nos retorna o nome completo do arquivo, e a data de criação:
Get-ChildItem C:\SQLBackups\*.bak | Select-Object FullName,CreationTime
Perceba como eu específico mais de uma propriedade: Separando por vírgulas. No powershell, a vírgula tem um significado especial e teremos outras oportunidades de explorá-la melhor. Por enquanto, apenas entenda que ela é usada para especificar vários valores!
Já o seguinte exemplo retorna somente o nome do arquivo, o tamanho em bytes, e a data de modificação:
gci C:\SQLBackups\*.bak | select Name,Length,LastWriteTime
Aqui eu tomei a liberdade de usar os alias: gci para Get-ChildItem e select para Select-Object. No mais, apenas troquei os parâmetros passados para o Select-Object.
Uma pergunta que você pode estar se fazendo é: Como eu sei quais propriedades os objetos terão e o que elas significam? A resposta é simples: Com experiência, outros cmdlets, e documentação. Existem várias maneiras de se descobrir isso. Vamos explorar tudo ao longo dos outros posts desta série.
Para simplificar:
- Obter uma lista de arquivos de um diretório (gci, ls, e dir são alias para Get-ChildItem)
Get-Childitem <Diretorio> gci <Diretorio> ls <Diretorio> dir <Diretorio>
- | (pipe) é um operador usado para conectar o resultado de um comando com outro comando
- Pipeline é uma sequência de comandos conectados pelo |
- Cmdlets retornam objetos. Objetos são a representação de algo, como arquivos, diretórios, etc.
- Todo objeto possuem propriedades. Propriedades são valores identificados por um nome que dizem algo sobre o objeto
DBA Team Leader na Power Tuning