powershell - Powershell Grouping 在不同版本中的作用不同
问题描述
问题:如何编写它以便在 v4 和 v5 中给出相同的结果?
我正在尝试将以下数据集分组SiteCode
。
我有一个如下数据集[哈希数组]:
假设AppointmentId
总是唯一的
$groupedDataset = @{}
$dataset = @(
@{
Program = "x"
AppointmentId = "1234567891"
AdminDate = "x"
CountryName = "x"
SiteCode = "x1111"
DateRequested = "x"
SubjectID = "x"
AccountID = "x"
},
@{
Program = "x"
AppointmentId = "1234567892"
AdminDate = "x"
CountryName = "x"
SiteCode = "x1112"
DateRequested = "x"
SubjectID = "x"
AccountID = "x"
},
@{
Program = "x"
AppointmentId = "1234567893"
AdminDate = "x"
CountryName = "x"
SiteCode = "x1113"
DateRequested = "x"
SubjectID = "x"
AccountID = "x"
},
@{
Program = "x"
AppointmentId = "1234567894"
AdminDate = "x"
CountryName = "x"
SiteCode = "x1111"
DateRequested = "x"
SubjectID = "x"
AccountID = "x"
}
)
当我在下面运行以下代码时PS Version: 5.1
$dataset |
ForEach-Object { [PSCustomObject]$_ } |
Group-Object -Property SiteCode |
ForEach-Object {
$groupedDataset[$_.Name] = $_.Group
}
它返回我需要的结果:
Name Value
---- -----
x1113 {@{SiteCode=x1113; Program=x; Appointment...
x1111 {@{SiteCode=x1111; Program=x; Appointment...
x1112 {@{SiteCode=x1112; Program=x; Appointment...
当我在其中运行确切的代码时,
PS Version: 4.0
它会返回以下内容:
Name Value
---- -----
{System.Collections.Hashtable, System.Collect...
解决方案
在 PowerShell v5.0 中进行了改进,例如。PSCustomObject 转换,在您的脚本中
ForEach-Object { [PSCustomObject]$_ }
尝试以老派的方式进行操作,而不是自己构建哈希表,而是使用 groupby 返回的哈希表。
$groupedDataset = $dataset |
ForEach-Object {
[PSCustomObject]@{
Program = $_.Program
AppointmentId = $_.AppointmentId
AdminDate = $_.AdminDate
CountryName = $_.CountryName
SiteCode = $_.SiteCode
DateRequested = $_.DateRequested
SubjectID = $_.SubjectID
AccountID = $_.AccountID
}
} |
Group-Object -Property SiteCode -AsHashTable
这导致
$groupedDataset | out-host
Count Name Group
----- ----- ------
2 x1111 {@{Program=x; AppointmentId=1234567891; AdminDate=x; CountryName=x; SiteCode=x1111; DateRequested=x; SubjectID=x; AccountID=x}, @{Program=x; AppointmentId=1234567894; AdminDate=x; CountryN...
1 x1112 {@{Program=x; AppointmentId=1234567892; AdminDate=x; CountryName=x; SiteCode=x1112; DateRequested=x; SubjectID=x; AccountID=x}}
1 x1113 {@{Program=x; AppointmentId=1234567893; AdminDate=x; CountryName=x; SiteCode=x1113; DateRequested=x; SubjectID=x; AccountID=x}
推荐阅读
- java - 转出基于文本字段的搜索栏
- powershell - 无法将变量解析到 ForEach($Servers 中的 $Server)循环中?
- php - 复杂对象的基于 PHP 条件的 JSON 输出
- android - 单击导航图的后退按钮时如何显示吐司
- php - Shopware 6:如何在管理模块的 Twig 模板中访问配置参数
- python - 列出我的子组中的所有工人
- laravel - Laravel 5.6 Flash Messages 必须自动关闭
- angular - 角度的动态嵌套菜单
- docker - 错误:根据名称找到 2 个匹配项:网络
_default 不明确 - sql - 如何搜索从某个时间点发生变化的 Oracle DB 条目?