PowerShell脚本运行正常但PSCustomObject输出IP被截断该如何解决?
问题根因
IP截断问题不是PSCustomObject构造逻辑错误,也不是net time返回结果存在异常,是PowerShell默认的表格输出格式会根据控制台宽度自动截断超出长度的属性值,默认对字符串类型的列预留宽度不足时就会出现末尾...的截断表现。
修复方案
- 方案1:输出时强制指定列宽,通过
Format-Table参数调整IP列的显示宽度即可解决截断问题
# 原有逻辑不变,将脚本输出结果存入变量后格式化输出 $computers = Get-Content "C:\Users\Administrator\Desktop\DAVID\TimeSyncFinal\CheckTime\allips.txt" $results = foreach ($strComputer in $computers) { $TextOutput = net time \\$strComputer $ip,$time,$time1 = ($TextOutput -split ' ')[3,6,7] [PSCustomObject] @{ IP = $ip -replace ".*\\" Time = $time+$time1 } } # IPv4地址最长为15位,直接指定IP列宽度为15即可完整展示 $results | Format-Table @{Name='IP';Expression={$_.IP};Width=15},Time -AutoSize
- 方案2:直接使用IP列表中的原值填充IP字段,更稳妥避免net time输出格式变化导致的拆分错误
$computers = Get-Content "C:\Users\Administrator\Desktop\DAVID\TimeSyncFinal\CheckTime\allips.txt" $results = foreach ($strComputer in $computers) { $TextOutput = net time \\$strComputer $time,$time1 = ($TextOutput -split ' ')[6,7] [PSCustomObject] @{ IP = $strComputer Time = $time + $time1 } } $results | Format-Table -AutoSize
- 方案3:如果需要留存结果,直接导出为CSV文件不会出现截断问题
$results | Export-Csv -Path "C:\时间同步检测结果.csv" -NoTypeInformation -Encoding UTF8
补充说明
你之前尝试使用的-ExpandProperty是Select-Object的专用参数,作用是展开对象的嵌套属性,不适用于解决本场景的控制台显示截断问题。
内容的提问来源于stack exchange,提问作者dweaver829
相关产品推荐
相关产品推荐

