我试图用我的硬盘搜索文件:
Get-ChildItem -Path C:\ -Filter *.pst -Recurse | ?{$_.PSIsContainer } | Select-Object FullName
这应该返回它所在的文件夹。可能有多个,所以我需要将它存储在一个数组中。它返回拒绝访问错误。
我该怎么做?
答案 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
参数。