代码之家  ›  专栏  ›  技术社区  ›  BuddyJoe

PowerShell 2中的结构或对象

  •  9
  • BuddyJoe  · 技术社区  · 16 年前

    最新版本的PowerShell是否能够执行类似于javascript的操作:

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

    如果没有,什么是等效的或变通的?

    更新
    阅读所有评论

    6 回复  |  直到 16 年前
        1
  •  13
  •   JaredPar    16 年前

    通过add-member cmdlet的功能不直接支持语法。不久前,我将此功能包装在一个通用的tuple函数中。

    这将使您能够一行创建这些对象。

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

    这是新元组的代码

    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
    } 
    

    关于主题的博客文章: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

        2
  •  11
  •   David Brabant    9 年前

    对于简单的方法,首先是哈希表(在v1中可用)

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

    第二,是PSObject(在V2中更容易)

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

    它给你大致相同的对象,但是如果你想对它们进行排序/分组/格式化/导出,PSObjects就更好了。

        3
  •  5
  •   EBGreen    16 年前

    抱歉,尽管所选的答案很好,但我还是无法抵制黑客式的一行回答:

    New-Object PsObject | Select-Object x,y | %{$_.x = 12; $_.y = 50; $foo = $_; }
    
        4
  •  3
  •   dan-gph    16 年前

    你可以这样做:

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

    对于其他地方的某个注释,自定义对象可能比哈希表更有用,因为它们可以更好地处理期望对象具有命名属性的Cmdlet。例如:

    $mypoints | Sort-Object y   # mypoints sorted by y-value
    
        6
  •  0
  •   Phil Factor    13 年前
    $point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}
    

    或者更直观地说

    $point = "" | Select x,y
    $point.x=12; $point.y=15