当使用UNC路径(例如:\\machine\share\dir
)时,我可以在使用时获取文件列表dir
命令(Get-ChildItem
)从一个UNC路径,但如果我尝试[System.IO.Directory]::GetFiles
,我得到一个空列表(不是错误,只是没有项目)。我认为PS是建立在.NET框架之上的。有谁知道为什么Get-ChildItem
可以使用UNC路径,而.NET GetFiles
方法返回空列表?Get-ChildItem与使用UNC路径直接使用.NET Framework的[System.IO.Directory] :: GetFiles()方法
回答
[System.IO.Directory]::GetFiles()
只返回文件,而Get-ChildItem
(和它的内置别名dir
)默认返回这两个文件和目录。
因此,呼吁有子目录只(不文件)目录[System.IO.Directory]::GetFiles()
产生“无中生有”(空字符串数组))。
把它的另一种方式,松散说:Get-ChildItem
是工会的[System.IO.Directory]::GetFiles()
(类似于Get-ChildItem -File
,PSv3 +)和[System.IO.Directory]::GetDirectories()
(类似于Get-ChildItem -Directory
,PSv3 +),或者更直接地说,对口[System.IO.Directory]::GetFileSystemEntries()
。
另一种选择是使用.NET 4+(可在PSv3 +中使用)文件系统 - 项目枚举 API,例如[System.IO.Directory]::EnumerateFileSystemInfos()
。有关示例,请参阅我的this answer。
有Get-ChildItem
和直接使用[System.IO.Directory]
类型之间存在许多具体差异,但是,值得注意的是该Get-ChildItem
回报对象而不是字符串和Get-ChildItem
跳过隐藏项目在默认情况下(-Force
必须使用)。
通常,使用PowerShell自己的cmdlet和直接使用.NET Framework进行选择是便利和性能之间的折中。
后者通常会更快,并且在案例中,PowerShell版本1和2中的UNC路径尤其如此 - 请参阅this blog post。
有关补充信息,请参考wOxxOm和Mike Sherrill 'Cat Recall'。
谢谢,@ MikeSherrill'CatRecall' - 我已将您的提示纳入答案。 – mklement0
- 1. C# - 使用凭据连接unc路径
- 2. 将DirectoryInfo与UNC路径一起使用
- 3. 使用unc路径识别唯一使用unc路径的机器
- 4. forfiles与UNC路径
- 5. 使用具有凭证的UNC路径
- 6. 使用openrowset的无效UNC路径
- 7. 使用.NET将文件安全地复制到UNC路径
- 8. 使shlex.split尊重UNC路径
- 9. 如何从UNC路径使用部分?
- 10. 使用UNC路径,如水银IIS6 Server2003的路径位置
- 11. Windows 8 StorageFile.GetFileFromPathAsync使用UNC路径
- 12. UNC路径不能使用空格
- 13. UNC路径的System.IO.Path.GetPathRoot解决方法
- 14. Zend Framework - 直接使用SQL
- 15. 在Windows下使用Python连接UNC路径
- 16. VBA - 路径,GetSaveAsFileName给出URL/SaveCopyAs与UNC配合使用
- 17. Path.GetDirectoryName UNC路径
- 18. 在.NET Compact Framework中使用HttpUtility.HtmlDecode方法?
- 19. 从共享(UNC路径)运行.Net 4.0 Winform应用程序
- 20. 用户输入路径GetFiles()错误
- 21. 使用UNC路径时SQLIOSIM无法启动
- 22. 无法直接从使用javascript的路径读取excel文件
- 23. Response.Redirect到UNC路径
- 24. 使用UNC路径的File.OpenRead访问。冒充不起作用?
- 25. wcf svclog unc路径?
- 26. 当使用UNC文件路径时Asp.net FileUploader不起作用
- 27. File.Copy从UNC路径(同一服务器)UNC路径查询
- 28. 用于UNC路径的SQL Server备份
- 29. 将路径转换为UNC路径
- 30. 如何在PowerShell的UNC路径中使用变量?
GetFileSystemEntries方法将是您正在寻找的模拟。另外,区别在于NET类更快,尤其是UNC部分。 – wOxxOm