PS7.2带UNC长路径前缀执行Get-ChildItem返回C盘内容问题咨询
问题判定
这是PowerShell 7.2版本的已知路径解析Bug,并非命令使用错误。
- PS7重构了跨平台路径处理逻辑后,对Windows平台专用的Win32文件命名空间前缀
\\?\(对应UNC场景的\\?\UNC\前缀)存在解析逻辑漏洞:传入带该前缀的UNC路径时,解析模块会错误丢弃前缀后的服务器名、共享名段,最终将路径根定位到当前系统盘(通常为C盘)根目录,这就是执行命令后返回C盘内容的直接原因。 - 移除
\\?\UNC\前缀后触发PathTooLongException是独立问题:PS7在Windows平台默认不会自动绕过传统260字符路径长度限制,未加命名空间前缀的长路径会直接被系统拦截报错。
可用解决方案
- 方案一(推荐):升级PowerShell到7.3.4及以上稳定版本。该
\\?\UNC\前缀解析Bug已经在7.3.x系列的补丁更新中修复,升级后带前缀的长UNC路径可被正常识别,不会再出现错误跳转C盘的问题。 - 方案二:开启系统级Windows长路径支持,无需手动添加
\\?\前缀即可访问长路径:- 执行以下命令修改注册表开启长路径支持(需管理员权限):
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1 -Type DWord - 重启PowerShell终端后,直接使用原始UNC路径
\\myserver\Dados01\Marketing执行Get-ChildItem即可,既不会触发路径过长异常,也不会出现路径解析错误。
- 执行以下命令修改注册表开启长路径支持(需管理员权限):
- 方案三(临时适配,无需升级或修改系统配置):通过
New-PSDrive将目标UNC路径映射为临时PowerShell驱动器,绕开路径长度检测和前缀解析逻辑:# 映射目标UNC路径到M盘 New-PSDrive -Name M -PSProvider FileSystem -Root '\\myserver\Dados01\Marketing' # 直接访问映射后的驱动器路径 Get-ChildItem -LiteralPath M:
内容的提问来源于stack exchange,提问作者geoced
相关产品推荐
相关产品推荐

