如何在PowerShell中创建匿名对象?

Luk*_*ett 22 powershell

我想创建一个任意值的对象,有点像我在C#中如何做到这一点

var anon = new { Name = "Ted", Age = 10 };
Run Code Online (Sandbox Code Playgroud)

Luk*_*ett 29

试试这个:

PS Z:\> $o = @{}
PS Z:\> $o.Name = "Ted"
PS Z:\> $o.Age = 10
Run Code Online (Sandbox Code Playgroud)

注意:您还可以将此对象包含在其中-Body,Invoke-RestMethod并且它将对其进行序列化而无需额外的工作.

  • 我喜欢这样做:`$ o = [ordered] @ {Name ="Ted"; 年龄= 10}` (10认同)
  • 这不是自定义对象。这是一个哈希表,请检查此`$ o.GetType()`。而且在严格的PS模式下,只有$ o ['Name']`无效。 (4认同)
  • @CB.可能想澄清那个实例中`[ordered]`的含义. (3认同)

Kyl*_*Mit 9

正如@Vasyl上面指出的那样,可接受的答案会创建一个哈希表,该哈希表实际上没有属性,但是包含一个包含字典的字典keysvalues因此它将与其他一些PS函数一起工作

看到: $o | Select -Property *

而是,按照4种创建PowerShell对象的方法,尝试以下任何一种方法:

#1可能是最新,最简单的语法,除非您有强烈的偏好

1.将Hashtable转换为 PSCustomObject

$o = [pscustomobject]@{
    Name = "Ted";
    Age = 10
}
Run Code Online (Sandbox Code Playgroud)

2.使用Select-Objectcmdlet

$o = Select-Object @{n='Name';e={'Ted'}},
                   @{n='Age';e={10}} `
                   -InputObject ''
Run Code Online (Sandbox Code Playgroud)

3.使用New-ObjectAdd-Member

$o = New-Object -TypeName psobject
$o | Add-Member -MemberType NoteProperty -Name Name -Value 'Ted'
$o | Add-Member -MemberType NoteProperty -Name Age -Value 10
Run Code Online (Sandbox Code Playgroud)

4.使用New-Object和哈希表

$properties = @{
    Name = "Ted";
    Age = 10
}
$o = New-Object psobject -Property $properties;
Run Code Online (Sandbox Code Playgroud)


pra*_*mpe 7

使用 PowerShell 5+ 只需声明为:

    $anon = @{ Name="Ted"; Age= 10; }
Run Code Online (Sandbox Code Playgroud)

例子