Question

Does the latest version of Powershell have the ability to do something like JavaScript's:

var point = new Object();
point.x = 12;
point.y = 50;

If not, what is the equivalent or workaround?

UPDATE
Read all comments

Was it helpful?

Solution

The syntax is not directly supported by the functionality is there via the add-member cmdlet's. Awhile ago, I wrapped this functionality in a general purpose tuple function.

This will give you the ability to one line create these objects.

$point = New-Tuple "x",12,"y",50

Here is the code for New-Tuple

function New-Tuple()
{
    param ( [object[]]$list= $(throw "Please specify the list of names and values") )

    $tuple = new-object psobject
    for ( $i= 0 ; $i -lt $list.Length; $i = $i+2)
    {
        $name = [string]($list[$i])
        $value = $list[$i+1]
        $tuple | add-member NoteProperty $name $value
    }

    return $tuple
} 

Blog Post on the subject: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

OTHER TIPS

For simple ways, first, is a hashtable (available in V1)

$obj = @{}
$obj.x = 1
$obj.y = 2

Second, is a PSObject (easier in V2)

$obj = new-object psobject -property @{x = 1; y =2}

It gives you roughly the same object, but psobjects are nicer if you want to sort/group/format/export them

Sorry, even though the selected answer is good, I couldn't resist the hacky one line answer:

New-Object PsObject | Select-Object x,y | %{$_.x = 12; $_.y = 50; $foo = $_; }

You can do it like this:

$point = New-Object Object |
    Add-Member NoteProperty x ([int] 12) -passThru |
    Add-Member NoteProperty y ([int] 15) -passThru

Regarding one of your comments elsewhere, custom objects may be more useful than hash tables because they work better with cmdlets that expect objects to have named properties. For example:

$mypoints | Sort-Object y   # mypoints sorted by y-value
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}

or more intuitively

$point = "" | Select x,y
$point.x=12; $point.y=15
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top