PowerShell脚本输出合并问题:如何拆分两组数组输出?
问题解决:PowerShell数组输出顺序错乱的修复
问题根源
你的脚本出现输出合并、顺序错乱的核心原因有两个:
- PowerShell输出流机制:直接输出对象(如
$array1)会被送入Success流,PowerShell会缓冲这类输出,直到脚本执行完毕才统一格式化输出;而Write-Host是直接写入Host流(实时打印到控制台),两者的输出顺序会因此错位。 - 语法错误:
$$array2是无效的变量名,多余的$会导致变量赋值失败,最终输出的还是之前的缓存内容。
修正后的脚本
###Get todays date $Datestr = $Date.Date.ToString( "dd/MM/yyyy *") ##Display output Write-Host "All Users logged on today..." ###pipe query into array1 $array1 = $Logonsfound | Select Username, LogonType, LastLogon | Where-Object LastLogon -Like $Datestr | Sort { $_.Lastlogon } -Descending ##Display array1(强制立即输出) $array1 | Out-Host ####添加分隔空行 Write-Host "`n`n" ##Display output Write-host "The Single User:" ###pipe query into array2(修正变量名) $array2 = ($Logonsfound | Select Username, LogonType, LastLogon | Where-Object LastLogon -Like $Datestr | Sort { $_.Lastlogon } -Descending)[0] ##Display array2(强制立即输出) $array2 | Out-Host
关键修正点说明
- 修正变量名:将
$$array2改为$array2,确保变量正确赋值。 - 使用
Out-Host强制实时输出:Out-Host会直接将对象格式化后打印到控制台,绕过Success流的缓冲机制,保证输出顺序和代码执行顺序一致。 - 调整空行数量:把
Write-Host "n"改为Write-Host "nn"`,让分隔效果更贴近你的期望输出。
验证效果
修正后执行脚本,输出会严格按照代码顺序展示:
- 先打印"All Users logged on today..."
- 立即输出
$array1的完整表格 - 显示空行分隔
- 打印"The Single User:"
- 立即输出
$array2的单行表格
内容的提问来源于stack exchange,提问作者Iain Howard
相关产品推荐
相关产品推荐

