2016-08-04 44 views
0

在輸出中,來自Get_Type()的列名稱的標題行只顯示一次。這是爲什麼?每次我能做些什麼來使其顯示在GetType()的輸出中?爲什麼每次都不顯示來自GetType()的列名稱橫幅

PS C:\src\ps> Get-Content .\mva.ps1 
$items = "Doug", "Finke", "NY", "NY", 10017 
$FirstName, $LastName, $Rest = $items 

$FirstName 
$FirstName.GetType() 
"===============================" 
$LastName 
$LastName.GetType() 
"===============================" 
$Rest 
$Rest.GetType() 
"===============================" 

輸出。

PS C:\src\ps> .\mva.ps1 
Doug 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 
=============================== 
Finke 
True  True  String         System.Object 
=============================== 
NY 
NY 
10017 
True  True  Object[]         System.Array 
=============================== 
PS C:\src\ps> $PSVersionTable.PSVersion 

Major Minor Build Revision 
----- ----- ----- -------- 
5  0  10586 494 

回答

1

你可以通過值格式表(英尺):

Get-Content .\mva.ps1 
$items = "Doug", "Finke", "NY", "NY", 10017 
$FirstName, $LastName, $Rest = $items 

$FirstName; 
$FirstName.GetType() | ft; 
"===============================" 
$LastName; 
$LastName.GetType() | ft; 
"===============================" 
$Rest; 
$Rest.GetType() | ft; 
"===============================" 
0

Paweł Dyl beat me to a similar answer,但我想它擴大一點。

PowerShell格式化程序查看它看到的第一個對象,並決定如何根據該類型顯示輸出。

要解決這個問題,你必須決定你真正想做什麼。

首先,要明白,默認情況下,該代碼的輸出正沿着流水線發送,相當於全部發送到Write-Output。例如,如果這是一個函數,那麼所有這些數據將是返回值(但不是頭/格式化的信息,如果沒有其他數據處理,則在函數返回後出現)。

因此,如果您按照建議使用Format-Table,它看起來是正確的,但您已從根本上改變了發生的情況。在函數中,您將返回格式化對象;一個非常不同的事情。另外需要注意的是,即使默認格式是列表,它也會顯示錶格格式。

你也可以管道到Out-String,它會給你一個默認格式的字符串表示,但是你又回來了一個不同的東西:一個格式化的字符串。

可以通過管道將Out-Host,這將工作過,但重要的是,這些信息將返回到您的管道(從功能),但它會在屏幕上顯示。

所以只要考慮你真正想要什麼以及各種選項如何影響。

+0

當輸出管道包含一個'System.Reflection.TypeInfo'時,決定寫一些標題行。當後面的System.Reflection.TypeInfo對象出現時,標題行不會被寫出。爲什麼是第一次而不是其他人? – lit

+0

我仍然很想知道爲什麼標題首次出現,而不是其他人。 – lit