使用POSH 3.0,作为一个简单的例子,如果我填充数组并尝试使用FT -Autosize显示结果,那么我就不能再访问该变量了。有很多属性要显示,所以-autosize对于利用整个宽度非常重要。
$x | Select @{E={$_.AID};L="Action"},@{E={$_.ID};L="SSN"}... | `
FT -AutoSize
}
#Now the object is no longer accessible
$x | ForEach {
$_
}
所以我的目标是以格式良好的方式查看结果,同时保持变量中的值可访问。我曾尝试制作变量的副本,一个用于查看结果,另一个用于继续变量中的值,但同样的事情。
有人对此有任何好的想法吗?谢谢!
更好的例子:
[array]$recs= Invoke-Sqlcmd -ServerInstance $server `
-Database $db `
-InputFile 'c:\sqlquery.sql'
$arrRecs = @()
ForEach ($record in $recs) {
$newObjectRecs = New-Object PSCustomObject -Property @{
"todaysDate" = $_.TodaysDate
"cats" = $record.cats
"dogs" = $record.dogs
"surname" = $record.surname
"givenName" = $record.givenName }
$arrRecs += $newObjectRecs
}
$arrRecs | `
Select @{E={$_.cats};L="cats"},@{E={$_.dogs};L="dogs"},@{E={$_.TodaysDate};L="Date"},surname,givenName | `
Format-Table -AutoSize
$arrRecs | ForEach {
$_
Write-Host "---------"
}
$arrRecs
作为之前评论的更新,如果我在尝试显示到屏幕时迭代下面的ForEach语句,它将不会显示管道中的当前项目,但是当它到达结束时array,它显示数组中的所有项目。
如果我注释掉Format-Table -Autosize,它会按预期显示管道中的当前项目。
答案 0 :(得分:0)
作为一种黑客攻击(是的,我编写了一个带连字符的词,但我喜欢它,所以你必须忍受它)你可以尝试通过$x
抽取ForEach
并创建$ x中每条记录的自定义对象。类似的东西:
$x | %{[PSCustomObject][Ordered]@{
"Action"=$_.AID
"SSN"=$_.ID
"Taco"=$_.FishBeefOrChicken
"More"=$_.OtherProperties
}}| FT -Auto
虽然您显示的脚本根本不应改变$ x,并且$ x应该完好无损并且之后可以访问,但有时解决问题所需要的只是一个新视角和一种不同的方法来查找这是我们的错误。