Lembram-se dos bons e velhos dias do comando dir
do DOS? E o comando ls
do Linux? Se sim, o Get-ChildItem é basicamente isso, mas elevado a um nível superior.
Na verdade, temos até mesmo os comandos dir
e ls
no PowerShell na forma de um alias. O cmdlet Get-ChildItem do PowerShell não apenas pode listar arquivos e pastas em um sistema de arquivos por meio do console ou script do PowerShell, mas também pode enumerar chaves e valores do registro, certificados em vários repositórios de certificados e até mesmo o Active Directory, para citar alguns.
Se você é um iniciante/intermediário em script do PowerShell, não deixe de conferir meu mini-curso GRATUITO sobre a criação de uma ferramenta do PowerShell! Mais de 9.000 palavras de explicações detalhadas e insights sobre como construir uma ferramenta do PowerShell.
Para entender o Get-ChildItem, primeiro pense nele em relação ao dir
e ls
, mas em vez de apenas arquivos, ele trata muitos objetos como um item filho e os enumera. Você pode usar o alias ou o nome completo do comando para utilizá-lo.
Como esse comando está disponível desde o PowerShell v1, você pode ter certeza de que ele funcionará com sua versão do PowerShell.
Get-ChildItem percorre uma árvore
A file system is a hierarchy. It has a folder structure with files inside of folders and those folders inside of other folders. A file system is like a tree. That tree has a trunk (C:\
for example) and “branches” coming off of it (folders). In fact, we even have a tree
command.
Você pode direcionar esse comando para caminhos locais no computador local, usar um bloco de script remoto do PowerShell e usar o Get-ChildItem
dentro dele ou apenas apontá-lo para um caminho UNC. Todos funcionam da mesma maneira. Talvez eu queira listar todos os arquivos no diretório atual.
Provedores do PowerShell
A Microsoft percebeu que a navegação nessa estrutura de “árvore” de um sistema de arquivos poderia ser aplicada a outros sistemas também. Um sistema de arquivos “em árvore” possui pastas e arquivos, mas um registro tem chaves e valores, enquanto o sistema de certificados no Windows possui repositórios e certificados dentro desses repositórios. Cada uma dessas áreas específicas pode ser representada como uma árvore, e assim nasceu o provedor PowerShell. Por que toda essa conversa sobre provedores do PowerShell? Porque o cmdlet Get-ChildItem
faz parte dos cmdlets *-Item
que interagem com as unidades do PowerShell que cada provedor expõe.
O cmdlet Get-ChildItem
pode produzir qualquer número de objetos em uma unidade do PowerShell e permite que você processe cada item por meio do pipeline ou talvez em um loop foreach do PowerShell. Ele compreende o conceito de uma unidade do PowerShell, o que permite que você especifique um Path
de uma pasta do sistema de arquivos, uma chave do registro ou um repositório de certificados, tudo em um só.
Como pode ser visto abaixo, este comando pode enumerar a pasta C:\, a chave do usuário atual (HKEY Current User) e também o repositório de certificados do PowerShell.
Filtragem
O comando PowerShell Get-ChildItem
não apenas pode recuperar todos os objetos em um disco, mas também pode filtrar as informações através de alguns parâmetros diferentes: Filter
, Include
e Exclude
. Você sempre vai querer usar o onipresente parâmetro Filter
do PowerShell quando possível. Este parâmetro passa diretamente a sintaxe de filtro para o provedor individual. Embora seja muito mais rápido, essa sintaxe depende exclusivamente do provedor sendo consultado.
Por exemplo, uma sintaxe de Filter
como Name -eq 'foo'
pode ser completamente aceitável ao consultar arquivos, mas não funcionará de jeito nenhum ao consultar o registro porque o provedor do registro nem sequer possui um filtro!
No entanto, quando tudo mais falhar, você sempre terá os parâmetros Include
e Exclude
também.
Este comando no PowerShell também possui alguns parâmetros específicos do sistema de arquivos como Force
, que irá mostrar arquivos e pastas ocultos, File
e Directory
, que apenas encontram arquivos ou pastas. Dê uma olhada na descrição completa de Get-ChildItem
via Get-Help
ou na documentação da Microsoft.
Outra coisa legal sobre Get-ChildItem
é sua capacidade de resolver caminhos ao usar o caractere curinga. No PowerShell, o caractere curinga normalmente representa qualquer coisa. Por exemplo, se você quiser ver todos os arquivos com a extensão .txt, basta especificar o caminho para a pasta e *.txt
.
Nós também poderíamos filtrar pelos atributos do arquivo. Talvez só queiramos encontrar os arquivos somente leitura em uma pasta.
Resumo
Este comando PowerShell é um daqueles cmdlets que você usará repetidamente. Na maior parte do tempo, você provavelmente estará usando o provedor FileSystem, mas é importante lembrar que este cmdlet é capaz de fazer muito mais. Use-o para consultar arquivos, pastas, chaves de registro, valores de registro, certificados, usuários do Active Directory, computadores ou até mesmo variáveis de ambiente, funções e muito mais!
Em caso de dúvida, execute o comando Get-PSDrive
para ver uma lista de todas as unidades do PowerShell carregadas que Get-ChildItem
pode consultar para você.