为何PowerShell中System.IO.DirectoryInfo处理UNC路径不符合预期?
PowerShell Core 7.3中[System.IO.DirectoryInfo]处理UNC路径的行为异常原因
问题重现
本地路径正常行为
$dir = [System.IO.DirectoryInfo]'c:\deploy' $dir.BaseName # 返回 'deploy' $dir.Name # 返回 'deploy' $dir.Parent.Name # 返回 'c:\'
UNC路径异常行为
$target = [System.IO.DirectoryInfo]'\\sharedhost\Deploy' $target.Name # 返回 '\\sharedhost\Deploy' $target.BaseName # 返回 '\\sharedhost\Deploy' $target.Parent # 返回 $null
用户期望$target.Parent指向sharedhost,但实际返回null,且不想通过映射驱动器解决。
异常原因
这是.NET底层对UNC路径的设计逻辑导致的:
\\sharedhost\Deploy属于UNC共享根目录,也就是网络共享资源的顶级节点。在.NET的文件系统抽象中,这类路径没有父目录,所以Parent属性返回null。这和本地驱动器根目录(如c:\)的逻辑不同——本地驱动器根是操作系统层面的容器,而UNC共享根是网络共享的起点,不存在更上层的目录结构。- 对于UNC共享根目录,
DirectoryInfo的Name和BaseName属性会返回完整的共享路径,而非单独的共享名Deploy。因为在.NET的设计中,整个共享路径就是这个目录的标识,没有更上层目录可以拆分出单独的名称部分。
如果需要提取主机名或共享名,可以手动解析UNC路径字符串,示例:
$uncPath = '\\sharedhost\Deploy' $hostName = ($uncPath -split '\\')[2] $shareName = ($uncPath -split '\\')[3]
内容的提问来源于stack exchange,提问作者endurium
相关产品推荐
相关产品推荐

