Lembra dos bons tempos do comando dir
no DOS? E o comando ls
no Linux? Se sim, o Get-childItem é essencialmente isso, mas levado a um nível superior.
Na verdade, até mesmo temos os comandos dir
e ls
no PowerShell na forma de um alias. O cmdlet Get-Childitem do PowerShell não só pode listar arquivos e pastas em um sistema de arquivos via console do PowerShell 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 no Active Directory, para citar alguns.
Se você é um scripter iniciante/intermediário do PowerShell, não deixe de conferir meu mini-curso GRATUITO sobre como construir uma ferramenta do PowerShell! São mais de 9.000 palavras de explicação aprofundada 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.
Dado que este 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 este comando para caminhos locais no computador local, usar um script remoto do PowerShell e usar Get-ChildItem
dentro dele ou simplesmente apontá-lo para um caminho UNC. Todos funcionam da mesma forma. Talvez eu queira listar todos os arquivos no diretório atual.
Provedores do PowerShell
Microsoft percebeu que navegar por essa estrutura em forma de “árvore” de um sistema de arquivos poderia ser aplicado a outros sistemas também. Um sistema de arquivos em forma de “árvore” possui pastas e arquivos, mas um registro possui 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, assim nasceu o provedor do PowerShell. Por que toda essa conversa sobre provedores do PowerShell? Porque o cmdlet Get-ChildItem
faz parte dos cmdlets *-Item
que interagem com os drives do PowerShell que cada provedor expõe.
O cmdlet Get-ChildItem
pode produzir qualquer número de objetos em um drive do PowerShell e permite que você processe cada item através do pipeline ou talvez em um loop foreach do PowerShell. Ele compreende o conceito de um drive 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ó.
Você pode ver abaixo que este comando pode enumerar a pasta C:\, a hive HKEY Current User, bem como o repositório de certificados do PowerShell.
Filtragem
O comando Get-ChildItem
do PowerShell não pode apenas puxar todos os objetos em um disco, mas também pode filtrar as informações por meio 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 do filtro para o provedor individual. Embora muito mais rápido, essa sintaxe depende exclusivamente do provedor que está sendo consultado.
Por exemplo, uma sintaxe de filtro 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 tem um filtro!
Quando tudo o 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 exibirá arquivos e pastas ocultos, File
e Directory
, que só encontram arquivos ou pastas. Dê uma olhada na descrição completa do Get-ChildItem
via Get-Help
ou nos documentos da Microsoft.
Outra coisa legal sobre o 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 de arquivo .txt, basta especificar o caminho para a pasta e *.txt
.
Podemos também filtrar pelos atributos do arquivo. Talvez queiramos apenas encontrar os arquivos somente leitura em uma pasta.
Resumo
Este comando do PowerShell é um daqueles cmdlets que você usará repetidamente. Na maioria das vezes, 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 o Get-ChildItem
pode consultar para você.