如何使用 Powershell 排除系统目录

如何使用 Powershell 排除系统目录

我想要一种简单的方法来从 PowerShell 中的搜索中排除系统文件夹。

我使用以下脚本:

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

我基本上希望完全忽略 c:\windows 下的所有内容,但是,当我运行搜索时,我会不断收到错误,因为它在 c:\windows 下搜索;并且在某些情况下还会给出它找到的结果。

错误:(为什么我已将其排除,但它仍位于 c:\windows 下)

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

例如,它包括:(这些都应该排除)(基本上是 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

我基本上想在 c:\ 下进行递归搜索,然后排除我不想要的内容。从 c:\windows 及其下的所有内容开始。

答案1

建议进行一些小的语法修正(这些更改不会解决您的问题,只是更好的语法):

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

无论如何...

为什么我排除了它,它还是进入了 c:\windows

你只是从“C:\windows”中排除了结果的 Get-ChildItem。GCI 仍然需要检查您告诉它检查的文件夹,以查看是否有任何匹配项,这会导致访问被拒绝错误。

如果您想完全避免访问您无权访问的文件夹,那么您需要建立一个希望使用 GCI 检查的文件夹列表,而不是仅仅告诉 GCI 检查一切在当前路径中。

唯一的方法基本上是相同的程序:检查每个文件夹,并保留一个未遭拒绝访问的文件夹列表,然后将该列表用于 GCI。最终,您仍然会尝试访问文件夹(并抛出错误),因此这样做基本上没有任何好处(会增加复杂性)。

如果你不喜欢在运行命令时看到红色错误,您可以使用-ErrorAction参数并告诉 GCI 在发生错误时默默继续。例如:

Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse -ErrorAction SilentlyContinue

相关内容