我正在尝试使用 Powershell 中导入的 CSV 数据实现以下目标:
CSV 具有以下结构:
| FirstName | LastName | Tier |
| --------- | ------- | ---- |
| George | Smith | 0 |
| John | Fritz | 1 |
| Thomas | Adams | 1 |
| Manuel | Evans | 0 |
我按如下方式导入 CSV 数据:
$csv = Import-Csv csvfile.csv
现在问题来了。我正在尝试向对象添加更多线条
$csv
如果用户属于第 0 层,则应将相同的用户添加到第 1 层的对象中。
生成的 $csv 对象应如下所示:
| FirstName | LastName | Tier |
| --------- | ------- | ---- |
| George | Smith | 0 |
| John | Fritz | 1 |
| Thomas | Adams | 1 |
| Manuel | Evans | 0 |
| George | Smith | 1 |
| Manuel | Evans | 1 |
新的第 1 层行在对象中的放置顺序并不重要。它们应该位于包含所有原始数据的对象中的某个位置。我也不需要任何 CSV 文件中生成的第 1 层行。我只需要这些新行(成员)成为 $csv 对象的一部分,所有其他数据保持不变,这样我就可以使用 foreach 循环迭代同一对象中的原始数据和新数据。
到目前为止我尝试过但没有积极结果:
$csv = Import-Csv csvfile.csv
foreach ($User in $csv){
$tier = $User.Tier -replace '\s',''
if($tier -eq '0'){
$csv+= @{FirstName= $User.FirstName; LastName=$User.LastName; Tier='1'}
}
}
另一次尝试没有积极的结果:
$csv = Import-Csv csvfile.csv
foreach ($User in $csv){
$tier = $User.Tier -replace '\s',''
if($tier -eq '0'){
$csv | Add-Member -MemberType NoteProperty -Name 'FirstName' -Value $User.FirstName -Force
$csv | Add-Member -MemberType NoteProperty -Name 'LastName' -Value $User.LastName -Force
$csv | Add-Member -MemberType NoteProperty -Name 'Tier' -Value '1' -Force
}
}
在惨遭失败后,我向 StackOverflow 奇才寻求帮助。
我怎样才能做到这一点?如何使用不同的层值复制第 0 层行,同时将所有其他数据保持不变到同一对象中?
这是您可以执行此操作的一种方法,但请注意,此示例不会检查
Tier 1
对象是否已存在Tier 0
。演示:
您的第一次尝试非常接近,问题是您要向中添加哈希表
@{ ... }
而不是自定义对象,那么它应该可以正常工作,但您也应该尽量避免,因为它效率低下,您可以这样做,而不是在end 与我上面的例子非常相似:[pscustomobject]@{ ... }
$Csv
+=
如果您想添加
$Csv
而不生成新数组,建议使用 aList<T>
及其.Add
方法。此方法还需要一个for
循环,否则foreach
您会因在枚举时尝试改变集合而收到错误。