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

PowerShell脚本输出异常:调用NewSize后直接跳转至确认环节求助

解决PowerShell BitLocker脚本中驱动器大小输出问题

问题原因

你遇到的情况是:用Write-Host $test输出NewSize函数返回的驱动器大小对象时,PowerShell仅输出对象的字符串类型标识(而非可读的格式化内容),且脚本随即进入确认交互环节,导致你误以为输出步骤被跳过。核心问题在于:NewSize返回的是自定义PSObject,Write-Host无法自动格式化这类对象,只会显示其类型信息;同时脚本无停顿地执行后续逻辑,强化了“输出被跳过”的错觉。

解决方法

  1. 替换Write-Host为直接输出变量或Write-Output,PowerShell会自动以表格形式展示对象内容
  2. 优化重复调用Get-PartitionSupportedSize的逻辑,减少冗余命令执行
  3. 修复参数格式错误,避免后续分区调整失败

修改后的完整代码

$DiskDrive = $env:SystemDrive
$BLV = Get-BitLockerVolume -MountPoint $DiskDrive
$OnlyDriveLetter = $DiskDrive.Substring(0,1)
# 仅调用一次分区大小查询,存储结果复用
$PartitionSizeInfo = Get-PartitionSupportedSize -DriveLetter $OnlyDriveLetter
$MaxSize = $PartitionSizeInfo.SizeMax
$UsedSize = $PartitionSizeInfo.SizeMin

function Get-DriveSizeInfo {
    return $PartitionSizeInfo | Select-Object `
        @{Name="Min. Size (GB)"; Expression={[Math]::Round($_.SizeMin/1GB, 2)}}, `
        @{Name="Max Size (GB)"; Expression={[Math]::Round($_.SizeMax/1GB, 2)}}
}

function Confirm-PartitionExpansion($prompt) {
    do {
        choice /c yn /m $prompt
        $response = $LASTEXITCODE
    
        if($response -eq 1) {
            Write-Host "Expanding Drive Size" -ForegroundColor Green
            # 修复参数空格问题
            Resize-Partition -DriveLetter $OnlyDriveLetter -Size $PartitionSizeInfo.SizeMax
            Write-Host "New Drive Size is:" -ForegroundColor Cyan
            # 直接输出格式化后的分区信息
            Get-DriveSizeInfo
            exit
        }
        $response = 2
    } until ($response -eq 2)
    Write-Output "BitLocker encryption could not be enabled, Exiting program!"
}

if(($BLV.VolumeStatus -eq 'FullyDecrypted') -and ($UsedSize -lt $MaxSize)) {
    $confirmationPrompt = "Would you like to expand drive Partition to Maximum Size? "
    $statusMessage = "Drive is Decrypted and Partition is not fully Extended" 
    $sizeLabel = "Current Drive Size is: "
    
    Write-Host $statusMessage -ForegroundColor Cyan
    Write-Host $sizeLabel
    # 直接输出变量,自动格式化展示
    $currentDriveSize = Get-DriveSizeInfo
    $currentDriveSize
    # 启动确认流程
    Confirm-PartitionExpansion $confirmationPrompt
}

关键修改说明

  • 遵循PowerShell动词-名词命名规范重命名函数,提升可读性
  • 仅执行一次Get-PartitionSupportedSize,避免重复调用系统命令
  • 修复Resize-Partition参数中的空格错误(原代码-DriveLetter $OnlyDriveLetter-Size缺少空格)
  • 替换Write-Host $test为直接输出变量,让PowerShell自动以表格形式展示分区大小信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:38:30