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
相关产品推荐
相关产品推荐

