Como excluir o diretório do sistema usando o Powershell

1

Eu quero uma maneira simples de excluir a pasta do sistema das pesquisas no PowerShell.

Eu uso o seguinte script:

$mysys = 'c:\windows'    
PS C:\> Get-ChildItem -path . -Include *.txt -Exclude '$mysys' -Recurse

Eu basicamente quero que qualquer coisa em c: \ windows seja completamente ignorada, no entanto, quando eu executo a pesquisa, recebo continuamente erros enquanto ele procura em c: \ windows; e, em alguns casos, também apresenta os resultados encontrados.

Erro: (por que ele está indo até abaixo de c: \ windows quando eu o excluí)

Get-ChildItem : Access to the path 'C:\Windows\System32\LogFiles\WMI\RtBackup' is denied. At line:1

char:1 + Get-ChildItem -path . -Include *.txt -Exclude '$mysys' -Recurse -Dept ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (C:\Windows\Syst...es\WMI\RtBackup:String) [Get-ChildItem], UnauthorizedAccessExcept ion + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Por exemplo, inclui: (tudo deve ser excluído) (basicamente qualquer coisa em c: \ windows)

> >     Directory: C:\Windows\WinSxS\amd64_microsoft-windows-c..iser-inboxdatafiles_31bf3856ad364e35_10.0.14393.0_none_9eeac2cef7a25999
> 
> 
> Mode                LastWriteTime         Length Name                 
> 
> ----                -------------         ------ ----                                                                                
> -a----        7/16/2016   6:42 AM         855814 hwcompat_RS1.txt                                                                    
> ------        7/16/2016   6:42 AM           1764 hwexclude_RS1.txt                                                                   
> ------        7/16/2016   6:42 AM           1327 wucompat.txt

Eu basicamente quero fazer uma pesquisa recursiva em c: \ e excluir o que eu não quero. Começando com c: \ windows e tudo abaixo dele.

    
por gsb005 07.04.2017 / 17:14

1 resposta

0

Sugira algumas pequenas correcções de sintaxe (estas alterações não irão resolver o seu problema, é apenas uma melhor sintaxe):

$mysys = 'c:\windows\*'    
Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse

De qualquer forma ...

why is it even going under c:\windows when I excluded it

Você está excluindo apenas as coisas em "C: \ windows" dos resultados de Get-ChildItem. O GCI ainda precisa verificar nas pastas que você pediu para verificar se há algo correspondente, o que causa o erro de acesso negado.

Se você quiser evitar completamente as pastas às quais não tem acesso, precisará criar uma lista de pastas que deseja verificar com o GCI, em vez de apenas informar o GCI para verificar tudo no caminho atual.

A única maneira de fazer isso é basicamente o mesmo procedimento: marque todas as pastas e mantenha uma lista daquelas que você não tem acesso negado, então use essa lista com o GCI. No final, você ainda está tentando acessar as pastas (e lançando o erro) de qualquer maneira, então não há basicamente nenhum ganho em fazer isso (espere complexidade adicional).

Se você simplesmente não gostar de ver os erros vermelhos ao executar o comando , poderá usar o -ErrorAction e informe ao GCI para continuar em silêncio sobre erros. Por exemplo:

Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse -ErrorAction SilentlyContinue
    
por 07.04.2017 / 17:52