2017-03-08 29 views
0

背景集團,目的是使用計算性能

從預定義servernames節點的名單,我在尋找的配置文件,並試圖組爲每個服務器都在那裏它找到的文件時,顯示一個哈希表。文件名可以映射到應用程序。

問題

分組部是給我的問題。它不斷返回一個散列表,我只是想要返回文件名。

SSCCE注:分組是在SSCCE文件名,但問題的要點是一樣的

這個例子是表示在找到匹配的,而不是僅僅是比賽的整條生產線

@("A test", "Another test") | sls -pattern "\btest\b" | group filename | select name, group 

爲了適應這種情況,我添加了一個計算屬性來僅獲得匹配。不幸的是,這顯示了該組作爲一個Hashlist。

@("A test", "Another test") | sls -pattern "\btest\b" | select filename, @{n="Server";e={$_.matches[0].Value}} | group filename | select name, group 

TLDR;以下就是我目前使用

@(
    "server1" 
    , "server2" 
) | 
% {sls -path "C:\PrivateWS\sources\confdoc\applicaties\*.yml" -Pattern "\b$($_)\b"} | 
select Filename, @{n="Server";e={$_.matches[0].Value}} | 
group server | select name, group 

,這將返回這樣的事情

Name Group                                                
---- -----                                                
server1 {@{Filename=applicationX.yml; Server=server1}, @{Filename=applicationY.yml; Server=server1}}                     
server2 {@{Filename=applicationX.yml; Server=server2}} 

,我想有它返回此

Name Group                                                
---- -----                                                
server1 {applicationX.yml, applicationY.yml}                     
server2 {applicationX.yml} 

回答

1

這是否給你想要(代替最後一行代碼):

group server | select name, @{name='group'; expression={$_.group | Select -ExpandProperty Filename}} 

而且擺脫了散列/花括號:

group server | select name, @{name='group'; expression={(@($_.Group | Select -ExpandProperty Filename)) -join ', '}} 
+0

謝謝,我已經添加了'-Unique'的選擇和它做正是我需要的。 –

+0

沒問題。很高興幫助。 – TechSpud

1

你看到的有自定義對象,而不是哈希表的字符串表示。你明白了,因爲Group-Object不會將輸入對象的一個​​屬性分組,而是整個對象。

我想你真正想要的是你組的列表轉換爲一個哈希表:

$ht = @{} 
'server1', 'server2' | 
    ForEach-Object { Select-String ... } | 
    Select-Object Filename, @{n="Server";e={$_.matches[0].Value}} | 
    Group-Object server | 
    ForEach-Object { $ht[$_.Name] = $_.Group | Select-Object -Expand Filename } 
+0

謝謝Ansgar直接設置術語。這也適用。 –