首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PowerShell中动态地向自定义对象添加新属性

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

Stack Overflow用户
提问于 2019-02-13 10:03:59
回答 2查看 9.6K关注 0票数 7

我有一个自定义对象,它包含如下所示的设备信息。

代码语言:javascript
复制
name,model,sn
PC1,Elitebook 850, ABC123,
PC2,EliteDesk 600,123ABC

我有一个功能,可以检索由防病毒产品检测到的威胁。它们以对象数组的形式返回。下面有更多的属性,但这只是一个示例

代码语言:javascript
复制
file,md5
bad.exe,adfdfdfd
evil.exe,fdfdffdf

我想将每个成员作为属性添加到自定义对象中,因此最终输出类似于下面的内容。

代码语言:javascript
复制
name,model,sn,01_file,01_md5,02_file,02_md5

目前,我的脚本是这样做的:

代码语言:javascript
复制
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‘函数返回的每个对象都被列为它自己的属性集。我需要动态生成它,因为我不知道每个设备将返回多少威胁。

有没有关于如何去做的想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-14 02:46:11

来自@krome的答案让我找到了正确的方向,尽管这个答案对我来说不起作用,因为每个设备都可能存在多个威胁。

我在Dynamically get PSCustomObject property and values上使用@scobi的答案来得到这个答案,它满足了我对动态生成新属性的要求。

代码语言:javascript
复制
foreach($device in $devices){
    $threats = Get-Threats $device
    if($null -ne $threats){
        $i = 1
        foreach($threat in $threats){
            $threat | Get-Member -MemberType NoteProperty | % Name | %{                
                Add-Member -InputObject $device -NotePropertyName ("Threat"+$i.ToString() + "_" + $_) -NotePropertyValue $threat.$_ -Force            
            }
            $i++
        }
    }
}
Write-Output $devices

  • I循环遍历devices数组中的每个设备,并调用我的Get-Threats函数。
  • if语句将阻止循环为没有if的任何设备运行。add -
  • 用作计数器,为找到的每个威胁递增属性名称,以便属性都具有唯一名称。然后,我循环D14>发现的每个威胁的管道,以检索属性名称和值
  • 。我使用add-
  • 为循环中的每个D17添加发现的每个威胁的附加属性。使用计数器为每个属性指定唯一的名称
票数 1
EN

Stack Overflow用户

发布于 2019-02-13 10:17:56

可以随时使用Add-Member cmdlet向对象添加属性。也许可以从一个空对象开始,遍历Get-Threat返回的元素,每次都添加一个成员?

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

编辑:示例代码,以供参考。

代码语言:javascript
复制
$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
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54661402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档