【发布时间】:2017-11-03 02:08:16
【问题描述】:
我正在使用 Powershell 5 在文件夹中搜索最新的 .bak 文件。
Get-ChildItem -Path $SourceBackupPath -Filter *.bak
如果我传入"C:\temp\",这可以正常工作,但如果我传入"E:\temp\",我会收到错误:
Get-ChildItem:找不到驱动器。名为“E”的驱动器不存在。
如果我传入一个 UNC 路径 "\\MyServer\e$\Temp\" 我会收到错误:
Get-ChildItem:无法调用方法。提供者不支持使用过滤器。
【问题讨论】:
-
在您的第二个测试中,带有 UNC 引用的那个应该是“\\”,而不是“\”——这只是一个错字吗?
-
谢谢。看起来 stackoverflow 将 2 个反斜杠转换为 1。
-
Get-ChildItem -Path $SourceBackupPath | Where-Object { $_.Extension -eq '.bak' }然后按日期排序,然后取最近的,是最直接的方法。但是根据要搜索的文件和文件夹的数量,Get-ChildItem 也可能会很慢,您需要挖掘到命令提示符“dir”、Robocopy、Windows 搜索索引器、“一切”api 等来列出文件更快。 -
Get-ChildItem -Path $SourceBackupPath | ? { $_.Name -like "*sometext*.bak" } - 在这种情况下,星号是通配符,或者如果您擅长使用正则表达式:Get-ChildItem -Path $SourceBackupPath | ? { $_.Name -match 'somestring\.bak$' }
-
奇怪的是我无法重新创建问题,我可以在任何带有过滤器的 unc 路径上获取子项,没有问题。
Get-ChildItem -Path "\\server01\Shared$\test" -Filter *.pdf
标签: powershell