Powershell 如何将PS对象输出为自定义格式字符串

Powershell 如何将PS对象输出为自定义格式字符串,powershell,powershell-2.0,Powershell,Powershell 2.0,我有一个对象具有一组属性深度:1。如何以如下格式将对象输出为字符串: {property1\u name:property1\u value}{property2\u name:property2\u value}{property3\u name 上面是单行,但是属性值当然可以有换行符/回车符等 假设我不知道属性名称,它们可以更改 谢谢!这实际上取决于您正在查看的对象。我在csv上测试了这一点,它工作正常,尽管您可能希望对不同类型的对象进行一些小的格式化 $csv | Get-Memb

我有一个对象具有一组属性深度:1。如何以如下格式将对象输出为字符串:

{property1\u name:property1\u value}{property2\u name:property2\u value}{property3\u name

上面是单行,但是属性值当然可以有换行符/回车符等

假设我不知道属性名称,它们可以更改


谢谢!

这实际上取决于您正在查看的对象。我在csv上测试了这一点,它工作正常,尽管您可能希望对不同类型的对象进行一些小的格式化

$csv |
    Get-Member |
    Where-Object {$_.MemberType -eq "NoteProperty"} |
    Select-Object -Property Name | 
    ForEach-Object {
        "{" + $_.Name + " : " + $csv.($_.Name) + "}"
    }
例如,根据您在执行$csv | Get Member时看到的内容,您可能希望将NoteProperty更改为Property或其他内容。但这可能会起作用


请注意,您还必须在两个位置更改当前变量$csv的名称。

这实际上取决于您正在查看的对象。我在csv上测试了这一点,它工作正常,尽管您可能希望对不同类型的对象进行一些小的格式化

$csv |
    Get-Member |
    Where-Object {$_.MemberType -eq "NoteProperty"} |
    Select-Object -Property Name | 
    ForEach-Object {
        "{" + $_.Name + " : " + $csv.($_.Name) + "}"
    }
例如,根据您在执行$csv | Get Member时看到的内容,您可能希望将NoteProperty更改为Property或其他内容。但这可能会起作用


请注意,您还必须在两个位置更改当前$csv变量的名称。

我也可以评论一下meta powershell的功能。我喜欢使用$csv。$\u通过变量随意地按属性名称检索属性。如果您将-property name替换为-ExpandProperty name,则可以在e ForEach对象。@MaximeFranchot我有一个简单的平面对象,主要带有字符串属性。使用您的代码示例并将NoteProperty更改为Property,我可以得到属性名称,但不能得到值。显然,我将$csv更改为正确的变量名称。@gms0ulman谢谢,我会尝试,也许它可以解决我可以看到属性的问题名称而不是属性值。这是否意味着代码应该变成{+$\u+:+$csv.$\u+}?@Alex By如果您可以获得属性,那么一旦管道化,您应该能够使用$作为属性的引用。首先尝试不使用.Name,然后如果前一个不起作用,则尝试使用。我一直在玩,直到一切都起作用,例如,注释最后一个管道,直到前一个管道的输出完全符合我的要求。我可以另外,请评论一下meta powershell的功能。我喜欢你如何通过$csv.$\u轻松地通过变量按属性名称检索属性。如果你将-property name替换为-ExpandProperty name,你可以在ForEach对象中使用$\u而不是$\u.name。@MaximeFranchot我有一个简单的平面对象,主要是字符串属性。使用您的代码示例和将NoteProperty更改为Property,我可以获取属性名称,但不能获取值。显然,我将$csv更改为正确的变量名称。@gms0ulman谢谢,我会尝试一下,也许这会解决我可以看到属性名称但不能看到属性值的问题。这是否意味着代码应该变成{+$\+:+$csv.$+}?@Alex By如果您可以获得属性,那么一旦管道化,您应该能够使用$作为属性的引用。首先尝试不使用.Name,然后如果前一个不起作用,则尝试使用。我一直玩到一切都起作用,例如,注释最后一个管道,直到前一个管道的输出完全符合我的要求。