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