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

PowerShell foreach循环输出异常,磁盘状态判断脚本求助

PowerShell磁盘状态检测脚本问题修复

问题说明

作为脚本和PowerShell新手,我编写了一段用于检测磁盘状态、判断是否需要初始化或设置联机的脚本,但无论磁盘实际状态如何,输出结果始终一致。

原脚本如下:

# disk_stat.ps1
$hdisk =  get-disk | select number, partitionstyle
foreach ($object in $hdisk)
    {
      if ($object -ne 'MBR')
        {
         write-host = $object.number,$object.partitionstyle "Needs to be set ONLINE"
        exit
        }

     else
        {
        write-host = $object.number,$object.partitionstyle "Needs to be initialized"
        exit
        }
    }

执行get-disk | select number, partitionstyle的实际输出:

number PartitionStyle
------ --------------
     0 MBR           
     1 RAW    

预期输出应显示每个磁盘的对应状态(比如编号1的RAW磁盘需要设置联机,编号0的MBR磁盘已完成初始化),但实际仅输出:

= 0 MBR Needs to be initialized

错误原因

  • 对象比较逻辑错误:原脚本将整个磁盘对象$object与字符串'MBR'做比较,而非对象的PartitionStyle属性。对象与字符串永远不相等,导致比较逻辑完全失效。
  • 提前终止循环:循环内每次迭代后都执行exit,脚本处理完第一个磁盘就直接退出,后续磁盘根本不会被检测。
  • Write-Host语法错误:命令中多余的=号会被当作输出内容的一部分,导致输出格式混乱。

修复后的脚本

# disk_stat.ps1
$hdisk = Get-Disk | Select-Object number, partitionstyle
foreach ($object in $hdisk) {
    # 针对PartitionStyle属性做判断
    if ($object.PartitionStyle -ne 'MBR') {
        Write-Host "$($object.number) $($object.partitionstyle) 需要设置为联机状态"
    } else {
        Write-Host "$($object.number) $($object.partitionstyle) 已初始化,无需操作"
    }
    # 移除exit,确保所有磁盘都被处理
}

执行结果

运行修复后的脚本会输出:

0 MBR 已初始化,无需操作
1 RAW 需要设置为联机状态

内容的提问来源于stack exchange,提问作者work.acct0929

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:40:24