Powershell查询Win32_Service时如何为每条服务添加指定标注
修改后可实现标注功能的完整代码
Get-CimInstance Win32_Service | Where-Object { $_.PathName -like '*.exe*'} | Select-Object Name, State, Pathname, StartName | ForEach-Object { $_.PathName = ($_.PathName -split '(?<=\.exe\b)')[0].Trim('"') # 新增错误忽略参数,避免无权限读取路径时脚本中断 Add-Member -PassThru -InputObject $_ Acl (Get-Acl -LiteralPath $_.PathName -ErrorAction SilentlyContinue) } | Where-Object { $null -ne $_.Acl -and $_.Acl.Access.Where({ $_.IdentityReference -ceq 'BUILTIN\Utilisateurs' -and $_.FileSystemRights -eq 'FullControl' }, 'First').Count -gt 0 } | # 新增标注注入逻辑,给所有符合条件的记录加固定标注 Add-Member -PassThru -NotePropertyName 'RiskLabel' -NotePropertyValue 'Service exploitable'
实现说明
- 你原本的筛选逻辑完全可用,只需要在管道末尾追加
Add-Member调用即可注入自定义标注属性,-PassThru参数保证对象可以继续向下传递,支持后续导出、二次筛选操作 - 新增的
RiskLabel属性会作为独立字段存在,导出为CSV、JSON等格式时会完整保留标注信息 - 如果仅需要控制台可视化查看标注,不需要保留属性,可把最后一行替换为以下代码,输出时会直接生成标注列:
| Select-Object Name, State, Pathname, StartName, @{Name='风险标注'; Expression={'Service exploitable'}}
内容的提问来源于stack exchange,提问作者Boosted bug
相关产品推荐
相关产品推荐

