Trabalhar com ficheiros, pastas e chaves de registo

Este exemplo só se aplica a plataformas Windows.

O PowerShell usa o substantivo Item para se referir aos itens encontrados em uma unidade do PowerShell. Ao lidar com o provedor do Sistema de Arquivos do PowerShell, um Item pode ser um arquivo, uma pasta ou a unidade do PowerShell. Listar e trabalhar com esses itens é uma tarefa básica crítica na maioria das configurações administrativas, por isso queremos discutir essas tarefas em detalhes.

Enumerando arquivos, pastas e chaves do Registro

Como obter uma coleção de itens de um local específico é uma tarefa tão comum, o Get-ChildItem cmdlet foi projetado especificamente para retornar todos os itens encontrados em um contêiner, como uma pasta.

Se desejar retornar todos os arquivos e pastas contidos diretamente na pasta C:\Windows, digite:

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-16   8:10 AM          0 0.log
-a---        2005-11-29   3:16 PM         97 acc1.txt
-a---        2005-10-23  11:21 PM       3848 actsetup.log
...

A listagem é semelhante ao que você veria quando inserisse o dir comando no cmd.exe, ou o ls comando em um shell de comando UNIX.

Você pode executar listagens complexas usando parâmetros do Get-ChildItem cmdlet. Você pode ver a sintaxe do Get-ChildItem cmdlet digitando:

Get-Command -Name Get-ChildItem -Syntax

Esses parâmetros podem ser misturados e combinados para obter uma saída altamente personalizada.

Listando todos os itens contidos

Para ver os itens dentro de uma pasta do Windows e quaisquer itens contidos nas subpastas, use o parâmetro Recurse de Get-ChildItem. A listagem exibe tudo dentro da pasta Windows e os itens em suas subpastas. Por exemplo:

PS> Get-ChildItem -Path C:\WINDOWS -Recurse

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
...

Filtrando itens por nome

Para exibir apenas os nomes dos itens, use o parâmetro Name de Get-Childitem:

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

Listagem forçada de itens ocultos

Itens que estão ocultos no Explorador de Arquivos ou cmd.exe não são exibidos na saída de um Get-ChildItem comando. Para exibir itens ocultos, use o parâmetro Force de Get-ChildItem. Por exemplo:

Get-ChildItem -Path C:\Windows -Force

Esse parâmetro é chamado Force porque você pode substituir à força o comportamento normal do Get-ChildItem comando. Force é um parâmetro amplamente utilizado que força uma ação que um cmdlet normalmente não executaria, embora não possa executar nenhuma ação que comprometa a segurança do sistema.

Correspondência de nomes de itens com curingas

O Get-ChildItem comando aceita curingas no caminho dos itens a serem listados.

Como a correspondência curinga é tratada pelo mecanismo do PowerShell, todos os cmdlets que aceitam curingas usam a mesma notação e têm o mesmo comportamento de correspondência. A notação curinga do PowerShell inclui:

  • Asterisk (*) corresponde a zero ou mais ocorrências de qualquer caractere.
  • O ponto de interrogação (?) corresponde exatamente a um caractere.
  • O caractere de colchete esquerdo ([) e o caractere de colchete direito (]) cercam um conjunto de caracteres a serem correspondidos.

Aqui estão alguns exemplos de como a especificação curinga funciona.

Para localizar todos os arquivos no diretório do Windows com o sufixo .log e exatamente cinco caracteres no nome base, digite o seguinte comando:

PS> Get-ChildItem -Path C:\Windows\?????.log

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
...
-a---        2006-05-11   6:31 PM     204276 ocgen.log
-a---        2006-05-11   6:31 PM      22365 ocmsn.log
...
-a---        2005-11-11   4:55 AM         64 setup.log
-a---        2005-12-15   2:24 PM      17719 VxSDM.log
...

Para localizar todos os arquivos que começam com a letra x no diretório do Windows, digite:

Get-ChildItem -Path C:\Windows\x*

Para encontrar todos os arquivos cujos nomes começam com "x" ou "z", digite:

Get-ChildItem -Path C:\Windows\[xz]*

Para obter mais informações sobre curingas, consulte about_Wildcards.

Excluindo itens

Você pode excluir itens específicos usando o parâmetro Exclude de Get-ChildItem. Isso permite que você execute filtragem complexa em uma única instrução.

Por exemplo, suponha que você está tentando encontrar a DLL do Serviço de Tempo do Windows na pasta System32, e tudo o que você pode lembrar sobre o nome da DLL é que ele começa com "W" e tem "32" nele.

Uma expressão como w*32*.dll encontrará todas as DLLs que satisfazem as condições, mas você pode querer filtrar ainda mais os arquivos e omitir quaisquer arquivos win32. Você pode omitir esses arquivos usando o parâmetro Exclude com o padrão win*:

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*

    Directory: C:\WINDOWS\System32

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           3/18/2019  9:43 PM         495616 w32time.dll
-a---           3/18/2019  9:44 PM          35328 w32topl.dll
-a---           1/24/2020  5:44 PM         401920 Wldap32.dll
-a---          10/10/2019  5:40 PM         442704 ws2_32.dll
-a---           3/18/2019  9:44 PM          66048 wsnmp32.dll
-a---           3/18/2019  9:44 PM          18944 wsock32.dll
-a---           3/18/2019  9:44 PM          64792 wtsapi32.dll

Misturando parâmetros Get-ChildItem

Você pode usar vários dos parâmetros do Get-ChildItem cmdlet no mesmo comando. Antes de misturar parâmetros, certifique-se de que compreende a correspondência de caracteres curinga. Por exemplo, o comando a seguir não retorna nenhum resultado:

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

Não há resultados, embora existam duas DLLs que começam com a letra "z" na pasta do Windows.

Nenhum resultado foi retornado porque especificamos o curinga como parte do caminho. Embora o comando fosse recursivo, o Get-ChildItem cmdlet restringiu os itens àqueles que estão na pasta do Windows com nomes terminados em .dll.

Para especificar uma pesquisa recursiva para arquivos cujos nomes correspondam a um padrão especial, use o parâmetro Include .

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM       8261 zoneoc.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM     337920 zipfldr.dll