You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Get-ChildItem查询VMware数据存储返回路径重复如何解决

问题判定
  • 不属于使用方式错误,也不是cmdlet的预期正常输出,这是VMware PowerCLI模块中vmstores: PowerShell提供程序的已知bug。
  • 触发场景为:对vmstores psdrive下的深层嵌套目录执行Get-ChildItem,同时搭配-Recurse和-Include参数时,通用PowerShell文件系统属性FullName/PSPath/PSParentPath会错误重复拼接传入的起始查询路径段;而FolderPath/DatastoreFullPath是PowerCLI为数据存储文件对象单独实现的属性,不受该provider层bug影响,因此输出正常。该bug在PowerCLI 6.x、7.x的多个历史版本中均存在复现记录。
可选解决方案

按推荐优先级排序:

  1. 使用PowerCLI原生数据存储文件查询cmdlet替代vmstores路径遍历,稳定性最高,无路径异常问题:
    Get-Datastore -Name "DATASTORE" | Get-DatastoreFile -Path "vCloud01/media/c7129498-3290-4a7e-a7e1-5c80499e729f" -Recurse | Where-Object Name -like "*.iso" | Select-Object FullName
    
  2. 调整Get-ChildItem的参数写法规避bug:不要将深层目录直接传入-Path参数,可先切换到目标目录再执行递归查询,同时将-Include替换为-Filter(-Filter由provider层直接实现,不会触发路径拼接逻辑异常):
    Set-Location "vmstores:/IP@443/vCenter/DATASTORE/vCloud01/media/c7129498-3290-4a7e-a7e1-5c80499e729f"
    Get-ChildItem -Recurse -Filter *.iso | Select-Object FullName
    
  3. 路径修正兜底方案:如果不想调整现有查询逻辑,可直接通过字符串替换移除重复的路径段,处理逻辑简单可靠:
    $fixedPathPrefix = "vmstores:/IP@443/vCenter/DATASTORE/vCloud01/media/c7129498-3290-4a7e-a7e1-5c80499e729f"
    Get-ChildItem -recurse -Path $fixedPathPrefix -include *.iso | ForEach-Object {
        $_.FullName = $_.FullName.Replace("$fixedPathPrefix/$fixedPathPrefix", $fixedPathPrefix)
        $_
    } | Select FullName
    

内容的提问来源于stack exchange,提问作者Harry Allen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:10:33