自定义PsDrive文件系统无法获取FileSystemEntries问题求助
解决自定义PsDrive下[System.IO.Directory]::GetFileSystemEntries()路径错误问题
核心解决方案
直接传入$PWD或Get-Location会导致.NET错误解析PowerShell自定义驱动器路径,改用$PWD.ProviderPath获取.NET可识别的原生文件系统路径:
# 获取当前位置的原生路径 $nativePath = $PWD.ProviderPath # 调用.NET方法获取文件/目录 $fileEntries = [System.IO.Directory]::GetFileSystemEntries($nativePath)
问题原因
$PWD和Get-Location返回的是System.Management.Automation.PathInfo对象,直接转为字符串时会输出PowerShell格式的路径(如Steam:\)。.NET的文件系统API无法识别PowerShell自定义驱动器标识,会将其当作当前系统工作目录的子目录处理,最终生成错误路径(如C:\Users\MyUserName\Steam:)。
特殊场景处理(虚拟自定义PsDrive)
如果自定义PsDrive未映射到本地真实路径,需手动拼接原生路径:
- 获取驱动器的根原生路径
- 提取当前位置的相对路径
- 拼接为.NET可识别的完整路径
# 获取当前驱动器信息 $currentDrive = Get-PSDrive -Name $PWD.Drive.Name # 假设驱动器根路径对应原生路径(需根据实际配置调整) $nativeRoot = $currentDrive.Root # 提取当前位置相对驱动器根的路径 $relativePath = $PWD.Path.Replace("$($currentDrive.Name):\", "") # 拼接完整原生路径 $nativePath = Join-Path -Path $nativeRoot -ChildPath $relativePath # 执行.NET方法 $fileEntries = [System.IO.Directory]::GetFileSystemEntries($nativePath)
内容的提问来源于stack exchange,提问作者ktufathama
相关产品推荐
相关产品推荐

