PowerShell脚本输出异常:调用NewSize后直接跳转至确认环节求助
解决PowerShell BitLocker脚本中驱动器大小输出问题
问题原因
你遇到的情况是:用Write-Host $test输出NewSize函数返回的驱动器大小对象时,PowerShell仅输出对象的字符串类型标识(而非可读的格式化内容),且脚本随即进入确认交互环节,导致你误以为输出步骤被跳过。核心问题在于:NewSize返回的是自定义PSObject,Write-Host无法自动格式化这类对象,只会显示其类型信息;同时脚本无停顿地执行后续逻辑,强化了“输出被跳过”的错觉。
解决方法
- 替换
Write-Host为直接输出变量或Write-Output,PowerShell会自动以表格形式展示对象内容 - 优化重复调用
Get-PartitionSupportedSize的逻辑,减少冗余命令执行 - 修复参数格式错误,避免后续分区调整失败
修改后的完整代码
$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
相关产品推荐
相关产品推荐

