powershell - 如何在 PowerShell 中向自定义对象动态添加新属性

标签 powershell

我有一个自定义对象,其中包含看起来像这样的设备信息。

name,model,sn
PC1,Elitebook 850, ABC123,
PC2,EliteDesk 600,123ABC

我有一个功能可以检索防病毒产品检测到的威胁。它们作为对象数组返回。有比下面更多的属性,但这只是一个例子
file,md5
bad.exe,adfdfdfd
evil.exe,fdfdffdf

我想将每个成员作为属性添加到自定义对象中,因此最终输出与此类似。
name,model,sn,01_file,01_md5,02_file,02_md5

目前,我的脚本执行以下操作:
foreach($device in $devices){
    $threats = Get-Threats $device
    [pscustomobject] @{
        name = $device.device_name
        make = $device.make
        sn = $device.sn
        ThreatFileName = $threats.File -join ", "
        Threat_md5 = $threats.md5 -join ", "
    }
}

这可以正常工作,但我真的希望“Get-Threats”函数返回的每个对象都作为其自己的一组属性列出。我需要动态生成这个,因为我不知道每个设备会返回多少威胁。

关于如何解决这个问题的任何想法?

最佳答案

您可以随时使用 Add-Member 向对象添加属性。小命令。也许从一个空对象开始,循环遍历 Get-Threats 返回的元素,每次添加一个成员?

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-member?view=powershell-6

编辑:示例代码以供引用。

$o = [pscustomobject]@{
    MemberA='aaa'
    MemberB='bbb'
    MemberC='ccc'
    MemberD='ddd'
}

"Before"
$o | ft

$o | Add-Member -MemberType NoteProperty -Name 'MemberE' -Value 'eee'
$o | Add-Member -MemberType NoteProperty -Name 'MemberF' -Value 'fff'

"After"
$o | ft

关于powershell - 如何在 PowerShell 中向自定义对象动态添加新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661402/

相关文章:

powershell - 向使用 Start-Process 打开的 Powershell 发送多个参数

windows - 任务调度程序 - 仅针对特定任务运行事件

node.js - 在 nodejs 中执行长时间运行的 powershell 脚本

arrays - Powershell 数组包含数组

非交互模式的 Powershell 测试

regex - Powershell根据长度替换行上的文本

Jenkins Pipeline 中的 PowerShell 环境变量给出 `org.jenkinsci.plugins.workflow.cps.EnvActionImpl@1b69f5bb:VARIABLE_NAME`

powershell - EWS Managed api 中是否有类似于 PowerShell 中的 Get-CalendarProcessing 方法的方法?

powershell - 将多值属性导出到 CSV 上的新行

linux - PowerShell 脚本查找文件中的特定单词并在行开头添加 “4”