You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell统计PSObject属性值出现次数并添加成员的问题

解决PSObject添加休假统计属性的问题

你的问题出在用Select-String处理PSObject的方式不对——Select-String是针对字符串/文本行做匹配的,当你把整个PSObject传给它时,它会先把对象转换成单个字符串(比如示例里的@{EmployeeID=MACL22656; ...}),即便这个字符串里有多个"YES",Select-String只会返回1个匹配结果(因为是一行文本),所以统计出来的数量是1,这和你想要的统计每个属性值里的"YES"总数不符。

正确的解决方案

我们需要遍历PSObject的所有属性值,统计其中等于"YES"的数量,具体代码如下:

# 遍历每个员工对象
foreach ($emp in $employee) {
    # 统计所有属性值为"YES"的数量
    $leaveCount = ($emp.PSObject.Properties.Value | Where-Object { $_ -eq 'YES' }).Count
    # 添加NoteProperty
    $emp | Add-Member -NotePropertyName "EmployeeTotal_LeaveCount" -NotePropertyValue $leaveCount
}

代码解释

  • $emp.PSObject.Properties.Value:获取当前员工对象的所有属性值(比如EmployeeID的值、EmployeeLeave_Monday的值等)
  • Where-Object { $_ -eq 'YES' }:筛选出值等于"YES"的项
  • .Count:统计筛选后的项的数量,这就是我们需要的休假天数统计

测试示例

用你给出的示例对象测试:

$sampleEmp = [PSCustomObject]@{
    EmployeeID= 'MACL22656'
    EmployeeRole= 'Accountant'
    EmployeeDepartment= 'Accounts'
    EmployeeLeave_Monday= 'YES'
    EmployeeLeave_Tuesday= 'YES'
    EmployeeLeave_Thursday= 'YES'
}

# 应用上述代码
$leaveCount = ($sampleEmp.PSObject.Properties.Value | Where-Object { $_ -eq 'YES' }).Count
$sampleEmp | Add-Member -NotePropertyName "EmployeeTotal_LeaveCount" -NotePropertyValue $leaveCount

# 输出结果
$sampleEmp

输出会是:

EmployeeID           : MACL22656
EmployeeRole         : Accountant
EmployeeDepartment   : Accounts
EmployeeLeave_Monday : YES
EmployeeLeave_Tuesday: YES
EmployeeLeave_Thursday: YES
EmployeeTotal_LeaveCount : 3

完全符合你的预期!

内容的提问来源于stack exchange,提问作者Rahul Trivedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:21