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

PowerShell中Get-ChildItem检测不到已存在盘符 变量传参报错手动输入正常

问题根因
  • 核心问题出在盘符提取逻辑错误:你用Out-String把Win32_volume对象转成格式化输出字符串,再手动替换无用内容的操作,会残留换行、回车等不可见隐藏字符。最终$CDDriveLetterToText看起来是E:,实际携带的多余字符导致PowerShell无法识别为合法的盘符路径。
  • 补充说明:Get-WmiObject已经是PowerShell弃用的接口,优先用Get-CimInstance兼容性更好。
修复后的代码
Function Image-Windows10 () {
    # 直接提取所有光驱的盘符,不需要转字符串再做替换操作
    $CDDrives = Get-CimInstance Win32_LogicalDisk | Where-Object {$_.DriveType -eq 5} | Select-Object -ExpandProperty DeviceID
    $FlashDrives = Get-CimInstance Win32_DiskDrive | Where-Object {$_.InterfaceType -eq 'SCSI'} | Select-Object -Property index, size
    [int]$NumberOfFlashDrives = $FlashDrives.Count
    [int]$NumberOfCDDrives = $CDDrives.Count
    # 直接取最后一个光驱的盘符,为纯净的无隐藏字符的字符串
    $CDDriveLetterToText = $CDDrives[$NumberOfCDDrives - 1]

    $list = Get-ChildItem -Path $CDDriveLetterToText
}

Image-Windows10
验证方法(可选)

如果要确认你原来的代码存在隐藏字符问题,可以在报错前添加一行代码:
Write-Host "盘符长度:$($CDDriveLetterToText.Length)"
正常E:的字符串长度为2,如果输出结果大于2,就可以确认存在多余隐藏字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:36:05