How do I create an anonymous object in PowerShell?

后端 未结 3 1225
感动是毒
感动是毒 2021-01-01 12:28

I want to create an object of arbitrary values, sort of like how I can do this in C#

var anon = new { Name = \"Ted\", Age = 10 };
3条回答
  •  渐次进展
    2021-01-01 12:38

    You can do any of the following, in order of easiest usage:

    1. Use Vanilla Hashtable with PowerShell 5+

      In PS5, a vanilla hash table will work for most use cases

      $o = @{ Name = "Ted"; Age = 10 }
      

    2. Convert Hashtable to PSCustomObject

      If you don't have a strong preference, just use this where vanilla hash tables won't work:

      $o = [pscustomobject]@{
          Name = "Ted";
          Age = 10
      }
      

    3. Using Select-Object cmdlet

      $o = Select-Object @{n='Name';e={'Ted'}},
                         @{n='Age';e={10}} `
                         -InputObject ''
      

    4. Using New-Object and Add-Member

      $o = New-Object -TypeName psobject
      $o | Add-Member -MemberType NoteProperty -Name Name -Value 'Ted'
      $o | Add-Member -MemberType NoteProperty -Name Age -Value 10
      

    5. Using New-Object and hashtables

      $properties = @{
          Name = "Ted";
          Age = 10
      }
      $o = New-Object psobject -Property $properties;
      

    Note: Objects vs. HashTables

    Hashtables are just dictionaries containing keys and values, meaning you might not get the expected results from other PS functions that look for objects and properties:

    $o = @{ Name="Ted"; Age= 10; }
    $o | Select -Property *
    

    Further Reading

    • 4 Ways to Create PowerShell Objects
    • Everything you wanted to know about hashtables
    • Everything you wanted to know about PSCustomObject

提交回复
热议问题