前兩個答案都非常優秀,非常感謝。希望我可以將它們標記爲答案。回答我自己的問題,以便我可以刪除一些代碼,我認爲我不能在評論中做。
我的解決方案(耶,吃午飯和他的動手):
ls VisitRecord-1/Release,Dispo-1/Release -rec `
| % {@{FileName=$_.Name; ProductName=$_.VersionInfo.ProductName; ProductVersion=$_.VersionInfo.ProductVersion }} `
| New-HashObject `
| group FileName,ProductName,ProductVersion `
| % {$grp = $_.Name -split ', '; @{Count=$_.Count; FileName=$grp[0]; ProductName=$grp[1]; ProductVersion=$grp[2]}} `
| New-HashObject `
| Select Count,FileName,ProductName,ProductVersion `
| sort ProductName,FileName `
| ft -auto
不過似乎有點矯枉過正,但我就認爲這是錯誤的解決方法。
我喜歡PSCX,但是我對當地PS和什麼是PSCX感到困惑。我認爲New-HashObject 的勝利可能是,因爲它可以在其輸入上生成一串哈希表併產生一個對象流。可能的性能增益?
無論如何,高興地發現它是PS 2.0中的一個錯誤。我想這是一個足夠好的理由來升級。 :)安裝PS 3.0
重寫命令行後
編輯:
ls VisitRecord-1/Release,Dispo-1/Release -rec `
| % {@{FileName=$_.Name; `
ProductName=$_.VersionInfo.ProductName; `
ProductVersion=$_.VersionInfo.ProductVersion }} `
| New-HashObject `
| group FileName,ProductName,ProductVersion `
| % {@{Count=$_.Count; `
GroupCount=$_.Group.Count; `
FileName=$_.Group[0].FileName; `
ProductName=$_.Group[0].ProductName; `
ProductVersion=$_.Group[0].ProductVersion}} `
| New-HashObject `
| select Count,GroupCount,FileName,ProductName,ProductVersion `
| sort ProductName,FileName `
| ft -auto
加送GroupCount爲了說明,添加了[0]到組的引用。也許這會讓它在PS 2.0下工作,但現在還沒有回頭(對我來說)。 :)
(編輯:而這一切之後,上述不工作PS 2.0下,畢竟)
更多比你想要了解集團的對象:
ls VisitRecord-1/Release,Dispo-1/Release -rec `
| % {@{FileName=$_.Name; ProductName=$_.VersionInfo.ProductName; ProductVersion=$_.VersionInfo.ProductVersion }} `
| New-HashObject `
| group FileName,ProductName,ProductVersion `
| ? {($_.Count -gt 1) -and ($_.Group[0].ProductName -ne $Null)} `
| select -first 1 `
| fl
Name : Infragistics4.Shared.v13.1.dll, Infragistics4.Shared, 13.1.20131.2060
Count : 2
Group : {@{ProductVersion=13.1.20131.2060; FileName=Infragistics4.Shared.v13.1.dll; ProductName=Infragistics4.Shared},
@{ProductVersion=13.1.20131.2060; FileName=Infragistics4.Shared.v13.1.dll; ProductName=Infragistics4.Shared}}
Values : {Infragistics4.Shared.v13.1.dll, Infragistics4.Shared, 13.1.20131.2060}
看起來不需要周圍的$()。在看到Keith Hill的回答後,我嘗試了沒有它的版本,並且這也起作用。 –
這不是一個錯誤。 PowerShell V3添加了成員枚舉,這就是$ Collection.Property($ _。Group.Filename)在V3和更高版本中工作的原因。 –
@凱特希爾啊,我明白你在說什麼了。我忽略了他沒有嘗試讀取** GroupInfo **對象本身的屬性,因爲** $ _ **是** GroupInfo **對象,並且** $ _。Group **是該屬性的一個屬性** GroupInfo **對象,它是一個集合。所以他的代碼在PS 2.0中不起作用,因爲他試圖讀取集合的成員屬性,並且它僅在3.0中工作,因爲集合恰好在每種情況下都只有一個對象。在那種情況下,我有一個更好的答案 - 只需在'.Group'後添加'[0]',這是唯一需要的修改。我會更新我的答案。 –