最新版本的Powershell是否能够执行类似JavaScript的操作:
var point = new Object();
point.x = 12;
point.y = 50;
如果没有,等效或解决方法是什么?
更新
阅读所有评论
答案 0 :(得分:13)
通过add-member cmdlet的功能不直接支持语法。前一段时间,我将这个功能包装在一个通用的元组函数中。
这将使您能够一行创建这些对象。
$point = New-Tuple "x",12,"y",50
以下是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
}
博客文章主题:http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments
答案 1 :(得分:11)
对于简单的方法,首先是哈希表(在V1中可用)
$obj = @{}
$obj.x = 1
$obj.y = 2
其次,是PSObject(在V2中更容易)
$obj = new-object psobject -property @{x = 1; y =2}
它为您提供了大致相同的对象,但如果您想对它们进行排序/分组/格式化/导出,那么psobject会更好
答案 2 :(得分:5)
很抱歉,即使选择的答案很好,我也无法抗拒这个黑客的答案:
New-Object PsObject | Select-Object x,y | %{$_.x = 12; $_.y = 50; $foo = $_; }
答案 3 :(得分:3)
你可以这样做:
$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
答案 4 :(得分:3)
如何在PowerShell中创建对象
http://blogs.msdn.com/powershell/archive/2009/03/11/how-to-create-an-object-in-powershell.aspx
答案 5 :(得分:0)
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}
或更直观地
$point = "" | Select x,y
$point.x=12; $point.y=15