2009-09-10 64 views
23

我希望能夠在沒有任何列標題的情況下從PowerShell輸出數據。我知道我可以使用Format-Table -HideTableHeaders隱藏列標題,但在頂部留下空行。使用PowerShell輸出沒有列標題的數據

這是我的例子:

get-qadgroupmember 'Domain Admins' | Select Name | ft -hide | out-file Admins.txt 

如何消除列標題和空行?

我可以另起一行,並做到這一點:

Get-Content Admins.txt | Where {$_ -ne ""} | out-file Admins1.txt 

但我能做到這一點的一條線?

回答

35

在你的情況,當你只是選擇一個單一的屬性,最簡單的方法可能是完全繞過任何格式:

get-qadgroupmember 'Domain Admins' | foreach { $_.Name } 

這將讓你一個簡單的string[]沒有標題欄或空行。 Format-* cmdlet主要用於人類消費,因此它們的輸出設計不易於機器可讀或可分析。

對於多個屬性,我可能會使用-f格式運算符。東西沿線

alias | %{ "{0,-10}{1,-10}{2,-60}" -f $_.COmmandType,$_.Name,$_.Definition } 

這不是很漂亮,但可以讓您輕鬆完整地控制輸出格式。而沒有空行:-)

+0

非常感謝。順便說一下,在你的例子中,「{0,-10} {1,-10} {2,-60}」是做什麼的? – fenster 2009-09-11 15:02:01

+3

這是一個格式字符串。通常格式化字符串由大括號中的內容組成。首先是一個數字索引,它指出要格式化的對象數組中的哪個項目將被替換,您可以在逗號後面給出一個寬度。負向力左對齊而不是右對齊。上面的例子將分別輸出10,10和60個字符的命令類型,名稱和別名的定義。一旦你瞭解格式字符串是如何工作的,這一切都是有道理的:-)(參考:http://msdn.microsoft.com/en-us/library/txafckwd.aspx) – Joey 2009-09-11 17:44:17

23

如果用「格式表」,您可以使用-hidetableheaders

+2

這應該是批准的答案 – 2016-06-01 07:44:36

2

喬伊提到Format-*是供人食用。如果你正在寫一個文件以供機器使用,也許你想使用Export-*?一些好的是

  • Export-Csv - 逗號分隔值。非常適合當你知道列將會是什麼
  • Export-Clixml - 你可以導出整個對象和集合。這對序列化非常有用。

如果您想重新閱讀,可以使用Import-CsvImport-Clixml。我發現我比發明自己的數據格式更好(如果這是您的偏好,那麼掀起一個Import-Ini也很容易)。

12

更好的答案是讓腳本保持原樣。當進行Select name,跟隨它通過-ExpandProperty Name像這樣:

get-qadgroupmember 'Domain Admins' | Select Name -ExpandProperty Name | out-file Admins.txt 
+0

這是答案這個問題。 – robert 2017-07-07 12:49:38

+0

仍然以空行結束。 – 2017-07-10 12:00:05

+0

'Select -ExpandProperty Name'就足夠了,你不需要在命令中重複兩次'Name' – doubleDown 2017-09-04 08:53:18

2

首先我們搶命令的輸出,然後把它包起來,並選擇它的一個屬性。只有一個,它的「名稱」就是我們想要的。所以我們用「.name」選擇組屬性,然後輸出它。

到文本文件

(Get-ADGroupMember 'Domain Admins' |Select name).name | out-file Admins1.txt 

到csv

(Get-ADGroupMember 'Domain Admins' |Select name).name | export-csv -notypeinformation "Admins1.csv" 
-1

選擇對象後面添加參數-ExpandProperty,將返回唯一的數據沒有報頭。

相關問題