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