使用PowerShell查找文件并获取它所在的文件夹

时间:2015-07-09 06:50:59

标签: powershell

我试图用我的硬盘搜索文件:

Get-ChildItem -Path C:\ -Filter *.pst -Recurse | ?{$_.PSIsContainer } | Select-Object FullName

这应该返回它所在的文件夹。可能有多个,所以我需要将它存储在一个数组中。它返回拒绝访问错误。

我该怎么做?

2 个答案:

答案 0 :(得分:-1)

-erroraction SilentlyContinue添加到Get-ChildItem参数列表中。这样,您的cmdlet就不会在第一次访问被拒绝时停止,只会扫描您有权访问的文件夹。

答案 1 :(得分:-1)

过滤器?{$_.PSIsContainer}将仅匹配作为容器(即目录)的对象,但是您的Get-ChildItem语句仅生成文件,而不生成目录,因此管道的最终结果将为空。

您正在寻找匹配文件的Directory属性:

Get-ChildItem -Path 'C:\' -Filter '*.pst' -Recurse |
  Select-Object -Expand Directory -Unique |
  Select-Object -Expand FullName

您获得的“访问被拒绝”错误是因为您遍历整个卷C:,这很可能包含您无权访问的多个文件夹(甚至不是管理员)。< / p>

正如@Vesper已建议的那样,将-ErrorAction SilentlyContinue添加到Get-ChildItem语句(或设置$ErrorActionPreference = 'SilentlyContinue'),以使语句跳过您无法访问的目录。

Get-ChildItem -Path 'C:\' -Filter '*.pst' -Recurse -ErrorAction SilentlyContinue |
  Select-Object -Expand Directory -Unique |
  Select-Object -Expand FullName

如果您希望每个匹配文件的包含文件夹而不仅仅是唯一路径,请从第一个-Unique语句中删除Select-Object参数。