Trabalhar com arquivos, pastas e chaves do Registro
Este exemplo só se aplica a plataformas Windows.
O PowerShell usa o substantivo Item para se referir a itens encontrados em uma unidade do PowerShell. Ao lidar com o provedor do sistema de arquivos do PowerShell, um Item poderá ser um arquivo, uma pasta ou uma unidade do PowerShell. Listar e trabalhar com esses itens são tarefas críticas básicas na maioria das configurações administrativas, por isso abordaremos essas tarefas com mais detalhes.
Enumerar arquivos, pastas e chaves do Registro
Como a obtenção de uma coleção de itens de uma localização específica é uma tarefa comum, o cmdlet Get-ChildItem
foi desenvolvido especificamente para retornar todos os itens encontrados em um contêiner, como uma pasta.
Se você quiser 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 seria exibido quando você inserisse o comando dir
no cmd.exe
ou o comando ls
em um shell de comando do UNIX.
Você pode executar listagens complexas usando parâmetros do cmdlet Get-ChildItem
. É possível ver a sintaxe do cmdlet Get-ChildItem
digitando:
Get-Command -Name Get-ChildItem -Syntax
Esses parâmetros podem ser misturados e combinados para obter uma saída altamente personalizável.
Listar todos os itens contidos
Para ver tanto os itens em uma pasta do Windows e os itens contidos em subpastas, use o parâmetro Recurse de Get-ChildItem
. A lista exibe tudo dentro da pasta do Windows, bem como 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
...
Filtrar itens por nome
Para exibir somente os nomes dos itens, use o parâmetro Name de Get-Childitem
:
PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...
Forçar a listagem de itens ocultos
Itens que estão ocultos no Explorador de Arquivos ou no cmd.exe
não são exibidos na saída de um comando Get-ChildItem
. Para exibir itens ocultos, use o parâmetro Force do Get-ChildItem
.
Por exemplo:
Get-ChildItem -Path C:\Windows -Force
Esse parâmetro é chamado Force porque você pode forçar a substituição do comportamento normal do comando Get-ChildItem
. Force é um parâmetro amplamente usado que força uma ação que um cmdlet normalmente não executa, embora ele não executará qualquer ação que comprometa a segurança do sistema.
Corresponder nomes de itens com curingas
O comando Get-ChildItem
aceita curingas no caminho dos itens a serem listados.
Como a correspondência de curingas é identificada 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 de curinga do PowerShell inclui:
- O asterisco (
*
) corresponde a zero ou a mais ocorrências de qualquer caractere. - O ponto de interrogação (
?
) corresponde exatamente a um caractere. - Os caracteres de colchete esquerdo (
[
) e de colchete direito (]
) envolvem um conjunto de caracteres a serem correspondidos.
Aqui estão alguns exemplos de como a especificação de curinga funciona.
Para localizar todos os arquivos no diretório do Windows com o sufixo .log
e exatamente cinco caracteres no nome de 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 localizar 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, confira about_Wildcards.
Excluir itens
Você pode excluir itens específicos usando o parâmetro Exclude de Get-ChildItem
. Isso permite executar filtragem complexa em uma única instrução.
Por exemplo, suponha que você está tentando localizar a DLL de Serviço de Tempo do Windows na pasta System32, e tudo o que você lembra do nome da DLL é que começa com "W" e contém "32".
Uma expressão como w*32*.dll
encontrará todas as DLLs que atendem às condições, mas talvez seja interessante filtrar ainda mais os arquivos e omitir 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
Mesclar parâmetros do Get-ChildItem
Você pode usar vários parâmetros do cmdlet Get-ChildItem
no mesmo comando. Antes de mesclar parâmetros, certifique-se de que você compreende a correspondência de curingas. Por exemplo, o comando a seguir não retorna nenhum resultado:
Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
Não haverá nenhum resultado, mesmo que haja duas DLLs que comecem com a letra "z" na pasta Windows.
Nenhum resultado foi retornado, pois especificamos o curinga como parte do caminho. Mesmo que o comando seja recursivo, o cmdlet Get-ChildItem
restringiu os itens àqueles que estão na pasta do Windows com nomes que terminam com .dll
.
Para especificar uma pesquisa recursiva de arquivos cujos nomes correspondem 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