編輯:
因此您的實際情況是有點怪異,因爲我們在字符串數組工作一個自定義對象而不是一個哈希表。下面的代碼片段將把你的對象變成一個易於使用的[HashTable]
。假設:所有輸入數據是這樣形成良好
<# Example.csv
Computer name,IP-Address,Application
host1,10.10.10.10,firefox
host1,10.10.10.10,chrome
host1,10.10.10.10,internet explorer
host2,11.11.11.11,firefox
host2,11.11.11.11,chrome
host2,11.11.11.11,opera
#>
$Csv = Import-Csv -LiteralPath C:\Temp\Example.csv
[HashTable][email protected]{}
For ($i = 0; $i -lt ($Csv.'Computer name').Count; $i++)
{
If ($Hash.ContainsKey($Csv.'Computer name'[$i]))
{
$Hash.($Csv.'Computer name'[$i]).Application += $Csv.Application[$i]
Continue
}
$Hash.($Csv.'Computer name'[$i]) = @{
Application = @($Csv.Application[$i])
}
}
現在你的成員都可以訪問,像這樣:$Hash.Host1.Application
要得到你想要的輸出:
Set-Content -Path C:\Temp\file.csv -Value 'Computer Name,Application Name'
$Hash.Keys |
ForEach-Object
{
Add-Content -Path C:\temp\file.csv -Value "$_,$($Hash.$_.Application -join ',')"
}
當工作一個[PSCustomObject]
,你的成員在你可以做的事情上相當有限。下面是標準的成員(忽略):
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
知道了這一點,您可以通過REST解析複製:
$Comp = @('Equals','GetHashCode','GetType','ToString'
[HashTable][email protected]{}
($Object | Get-Member).Name |
ForEach-Object {
If ($_ -notin $Comp) {$CopyObject.$_ = $Object.$_}
}
雖然這是非常有用的,它並沒有完全完成我希望對於。我的目標是創建最終輸出,其中將包含一個計算機名稱,其中包含所有列在其下的應用程序。我收到的結果是所有計算機名稱的列表以及所有包含重複項的所有應用程序的列表。 – MrMr
@MrMr你的原始對象是一個'.csv'文件嗎? – TheIncorrigible1
是的,它最初是一個.csv – MrMr