2017-06-19 18 views
0

我必須顯示四列,但每次顯示三列,列引用不需要顯示空間問題。該代碼允許顯示不在列引用中的單元格。當單元格匹配時,其他列中的單元格消失。僅顯示所需的列PowerShell

文件:

ComputerName OtherComputerName OtherComputer AndAgain 
    infra-1  infra-852   infra-2  infra-99 
    infra-98 infra-85    infra-44  infra-23 
    infra-5  infra-8    infra-1  infra-10 
    infra-2  infra-55    infra-8  infra-70 
    infra-62 infra-5    infra-852  infra-5 

腳本:

$csv = Import-Csv .\test1.csv -Delimiter ';' 

$ref = @($csv.ComputerName) 
foreach ($row in $csv) { 
    foreach ($col in 'OtherComputerName', 'OtherComputer', 'AndAgain') { 
    if ($ref -contains $row.$col) { $row.$col = '' } 
    } 
} 

$csv 

上PS的結果是:我想不顯示計算機名稱列和退休的細胞之間的空間。

OtherComputerName OtherComputer AndAgain 
----------------- ------------- -------- 
infra-852      infra-99 
infra-85   infra-44  infra-23 
infra-8       infra-10 
infra-55   infra-8  infra-70 
        infra-852    

預期的結果:

OtherComputerName OtherComputer AndAgain 
----------------- ------------- -------- 
infra-852   infra-44  infra-99 
infra-85   infra-8  infra-23 
infra-8   infra-852  infra-10 
infra-55      infra-70 
+0

使用'Where-Object'來根據您想要的標準過濾輸出,'Select-Object'只輸出您想要的列。 –

+0

你能告訴我一個例子,我有點失落。我不知道如何使用它。 – charlo

+0

你的問題不清楚你想要使用什麼條件。 –

回答

2

您可以列表中的所有列/屬性包括

$csv | Select-Object OtherComputerName,OtherComputer,AndAgain 

或使用-ExcludeProperty刪除命名的 - b ut時,必須有至少一個,物業(位置0不必寫出來,簡單地使用所有的星號)

$csv | Select-Object * -ExcludeProperty ComputerName 

樣本輸出這裏正好符合您的要求:

OtherComputerName OtherComputer AndAgain 
----------------- ------------- -------- 
infra-852      infra-99 
infra-85   infra-44  infra-23 
infra-8       infra-10 
infra-55   infra-8  infra-70 
        infra-852 

不是一個表,但單一的萎縮西:

$csv|select Othercomputer|where Othercomputer -ne '' 

輸出示例:

OtherComputer 
------------- 
infra-44 
infra-8 
infra-852 
+0

當我排除列時,某些單元格之間仍然有很大的空間。可以退休嗎? – charlo

+0

追加'|格式表-auto' – LotPings

+0

'$ csv | Select-Object * -ExcludeProperty ComputerName | Format-Table -auto'就像這樣?如果是,它什麼也不做。 – charlo

0

這應該做你的工作:

$csv = Import-Csv .\test1.csv -Delimiter ';' 

$ref = @($csv.ComputerName) 
foreach ($row in $csv) { 
    foreach ($col in 'OtherComputerName', 'OtherComputer', 'AndAgain') { 
    if ($ref -contains $row.$col) { $row.$col = '' } 
    } 
} 

$csv | Select-Object ComputerName , AndAgain