【问题标题】:Force Convertto-html to only include an object's "MemberType" "property"强制 Convertto-html 仅包含对象的“MemberType”“属性”
【发布时间】:2021-07-22 20:58:36
【问题描述】:

我有一个 system.data.datarow 对象数组。现在这些对象的属性有我想要的信息。当我将这些对象传递给 convertto-html 时,它会拾取所有这些额外的废话,并且我看到名称为 RowError、RowState、Table- 的行,而我想要的只是对象属性。

有没有办法我只能包含要转换为 html 的对象的属性(这意味着如果我对对象执行 Get-Member 的“MemberType”属性)。

我可以将这些对象转换为通用 psobject,而不必遍历它们并使用 New-Object 重建它们吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用Get-MemberSelect-Object 获取所有Property 类型属性的名称:

    $Props = Get-Member -InputObject $DataRowObjects[0] -MemberType Property | Select-Object -ExpandProperty Name
    $Html = $DataRowObjects | Select-Object -Property $Props | ConvertTo-Html
    

    【讨论】:

    • select-object 对我不起作用,这就是为什么我询问将它们转换为通用对象的原因。我已经在做一个选择对象来过滤掉我想要的列(或对象属性),所以手动指定属性不是问题,但是当我将对象发送到 convertto-html 时,它会拾取所有其他东西。它是特定于该 cmdlet 的东西,因为 convertto-csv 可以按预期工作(它不包括对象属性以外的任何内容)。
    • 我可以重现您使用 $DataRowObjects | ConvertTo-Html 描述的内容,但是当我在管道到 ConvertTo-Html 之前进行选择时,它会按您的预期工作:$DataRowObjects | Select-Object -Property $Props | ConvertTo-Html
    • 嗯应该先测试一下,我想对不起。
    【解决方案2】:

    接受答案的唯一问题是它将字段的顺序从给定的字段名称更改为字母顺序

    为了避免和保持select语句的原始顺序,我使用了以下方法

    $unwantedColumns = @('RowError','RowState','Table','ItemArray','HasErrors') # these guys get added automatically by Invoke-SqlCmd
    
    $props = $sqlResult.PSObject.Properties.Name | Where-Object {$_ -NotIn $unwantedColumns}
    
    $htmlBody = $sqlResult |
            Select-Object -Property $props |
            ConvertTo-Html @ConvertToHtmlArgs |
            Out-String
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      相关资源
      最近更新 更多