如何在PowerShell中将exFAT驱动器设置为只读?
解决PowerShell设置exFAT驱动器只读的类型错误问题
错误原因分析
你遇到的错误核心是参数类型不匹配:Get-PSDrive返回的是PSDriveInfo对象,但Set-Partition的-DriveLetter参数要求传入单个字符(如'D'),直接传递对象就会触发类型转换失败。
修复后的可行方案
下面提供几种经过验证的实现方式,适配exFAT格式的无卷标驱动器:
方案1:通过磁盘编号设置只读(推荐)
直接通过驱动器字母关联到磁盘对象,设置磁盘级别的只读属性:
$driveLetter = Read-Host "Enter drive letter (e.g. D) to make read-only" # 清理输入,确保是纯字母(去掉可能的冒号) $cleanDriveLetter = $driveLetter.TrimEnd(":") try { # 获取分区对应的磁盘编号 $diskNumber = (Get-Partition -DriveLetter $cleanDriveLetter).DiskNumber # 设置磁盘只读 Set-Disk -Number $diskNumber -IsReadOnly $true -ErrorAction Stop Write-Output "Read-only attribute successfully set" } catch { Write-Output "Failed to set read-only attribute: $_" } pause
方案2:使用Set-Volume设置卷级别只读
如果不需要磁盘级别的只读,仅针对卷设置:
$driveLetter = Read-Host "Enter drive letter (e.g. D) to make read-only" $cleanDriveLetter = $driveLetter.TrimEnd(":") try { Set-Volume -DriveLetter $cleanDriveLetter -IsReadOnly $true -ErrorAction Stop Write-Output "Read-only attribute successfully set" } catch { Write-Output "Failed to set read-only attribute: $_" } pause
方案3:使用fsutil命令(兼容旧系统)
调用原生fsutil工具实现:
$driveLetter = Read-Host "Enter drive letter (e.g. D) to make read-only" # 确保输入带冒号,符合fsutil要求 $drivePath = if ($driveLetter.EndsWith(":")) { $driveLetter } else { "$driveLetter:" } # 执行fsutil命令 & fsutil volume setreadonly $drivePath 1 if ($LASTEXITCODE -eq 0) { Write-Output "Read-only attribute successfully set" } else { Write-Output "Failed to set read-only attribute (exit code: $LASTEXITCODE)" } pause
关键注意事项
- 运行PowerShell需要管理员权限,否则无法修改磁盘/卷的只读属性
- exFAT格式的只读属性是磁盘/卷级别的,不是文件系统的文件属性,因此不能用
Set-ItemProperty修改文件级ReadOnly属性 - 验证设置是否成功:可以用
Get-Disk -Number $diskNumber | Select-Object IsReadOnly或Get-Volume -DriveLetter $cleanDriveLetter | Select-Object IsReadOnly查看结果
内容的提问来源于stack exchange,提问作者Dan Lewis
相关产品推荐
相关产品推荐

