O Windows PowerShell utiliza o termo Item para se referir aos itens encontrados em uma unidade do Windows PowerShell. Quando lidamos com o provedor FileSystem do Windows PowerShell, um Item pode ser um arquivo, uma pasta ou uma unidade do Windows PowerShell. Listar e trabalhar com esses itens é uma tarefa básica e fundamental em muitas configurações administrativas, portanto vamos discutir essas tarefas em detalhes.

Enumerando arquivos, pastas e chaves do Registro (Get-ChildItem)

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

Caso você queira retornar todos os arquivos e pastas contidos diretamente na pasta C:\Windows, digite:

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.Windows 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 lista é similar ao que você veria se digitasse o comando dir no Cmd.exe ou o comando ls em um shell de comando do UNIX.

Você pode executar listagens bem complexas usando parâmetros do cmdlet Get-ChildItem. Veremos algumas situações a seguir. Você pode observar a sintaxe do cmdlet Get-ChildItem digitando:

PS> Get-Command -Name Get-ChildItem -Syntax

Esses parâmetros podem ser misturados e combinados para a obtenção de uma saída altamente personalizada.

Listando todos os itens contidos (-Recurse)

Para ver os itens que estão em uma pasta do Windows e quaisquer itens contidos nas subpastas, utilize o parâmetro Recurse de Get-ChildItem. A lista exibe tudo que existe na pasta Windows e os itens de suas subpastas. Por exemplo:

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

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

Filtrando itens por nome (-Name)

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çando a listagem de itens ocultos (–Force)

Os itens que normalmente estão invisíveis no Windows Explorer ou no Cmd.exe não são exibidos na saída do comando Get-ChildItem . Para exibir os itens ocultos, use o parâmetro Force de Get-ChildItem. Por exemplo:

Get-ChildItem -Path C:\Windows -Force

Esse parâmetro é chamado de Force porque você pode forçar a substituição do comportamento normal do comando Get-ChildItem. Force é um parâmetro amplamente utilizado para forçar uma ação que um cmdlet normalmente não executaria, embora ele não execute nenhuma ação que comprometa a segurança do sistema.

Encontrando nomes de itens com caracteres curinga

O comando The Get-ChildItem aceita caracteres curinga no caminho dos itens a serem listados.

Como o uso de caracteres curinga é manipulado pelo mecanismo do Windows PowerShell, todos os cmdlets que os aceitam utilizam a mesma notação e possuem o mesmo comportamento de busca de ocorrências. A notação de caracteres curinga do Windows PowerShell inclui:

  • O asterisco (*) encontra zero ou mais ocorrências de qualquer caractere.

  • O ponto de interrogação (?) corresponde exatamente a um caractere.

  • Os caracteres de abre colchete ([) e de fecha colchete (]) envolvem um conjunto de caracteres que deve ser encontrado.

A seguir, alguns exemplos de como funciona a especificação de caracteres curinga.

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

PS> Get-ChildItem -Path C:\Windows\?????.log
    Directory: Microsoft.Windows 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 encontrar todos os arquivos do diretório Windows que começam com a letra x, 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]*

Excluindo itens (-Exclude)

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

Por exemplo, suponha que você esteja tentando encontrar a DLL do Serviço Horário do Windows na pasta System32, e tudo o que consegue lembrar do nome da DLL é que ela começa com "W" e que também tem "32".

Uma expressão como w*32*.dll encontrará todas as DLLs que satisfaçam às condições, mas também retornará as DLLs de compatibilidade do Windows 95 e Windows de 16 bits que incluam "95" ou "16" em seus nomes. Você pode omitir arquivos que possuam qualquer um desses números em seus nomes usando o parâmetro Exclude com o padrão *[9516]*:

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

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

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2004-08-04 8:00 AM 174592 w32time.dll

-a--- 2004-08-04 8:00 AM 22016 w32topl.dll

-a--- 2004-08-04 8:00 AM 101888 win32spl.dll

-a--- 2004-08-04 8:00 AM 172032 wldap32.dll

-a--- 2004-08-04 8:00 AM 264192 wow32.dll

-a--- 2004-08-04 8:00 AM 82944 ws2_32.dll

-a--- 2004-08-04 8:00 AM 42496 wsnmp32.dll

-a--- 2004-08-04 8:00 AM 22528 wsock32.dll

-a--- 2004-08-04 8:00 AM 18432 wtsapi32.dll

Misturando parâmetros Get-ChildItem

Você pode usar vários parâmetros do cmdlet Get-ChildItem no mesmo comando. Antes de combinar os parâmetros, esteja certo de que entendeu o uso de caracteres curinga. Por exemplo, o seguinte comando não retorna resultado algum:

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

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

Nenhum resultado foi retornado porque especificamos o caractere curinga como parte do caminho. Mesmo que o comando tenha sido recursivo, o cmdlet Get-ChildItem restringiu os itens àqueles que estavam na pasta Windows e que tinham nomes terminados com ".dll".

Para especificar uma busca recursiva por arquivos cujos nomes tenham um padrão especial, utilize o parâmetro -Include.

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

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


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


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


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




Sumário