【发布时间】:2016-03-18 10:00:47
【问题描述】:
我想创建一个任意值的对象,有点像我在 C# 中如何做到这一点
var anon = new { Name = "Ted", Age = 10 };
【问题讨论】:
标签: powershell
我想创建一个任意值的对象,有点像我在 C# 中如何做到这一点
var anon = new { Name = "Ted", Age = 10 };
【问题讨论】:
标签: powershell
您可以按照最容易使用的顺序执行以下任何操作:
在 PowerShell 5+ 中使用 Vanilla Hashtable
在 PS5 中,普通哈希表适用于大多数用例
$o = @{ Name = "Ted"; Age = 10 }
将哈希表转换为PSCustomObject
如果您没有强烈的偏好,只需在普通哈希表不起作用的地方使用它:
$o = [pscustomobject]@{
Name = "Ted";
Age = 10
}
使用Select-Object cmdlet
$o = Select-Object @{n='Name';e={'Ted'}},
@{n='Age';e={10}} `
-InputObject ''
使用New-Object 和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
使用New-Object 和哈希表
$properties = @{
Name = "Ted";
Age = 10
}
$o = New-Object psobject -Property $properties;
哈希表只是包含keys 和values 的字典,这意味着您可能无法从查找objects 和properties 的其他PS 函数获得预期结果:
$o = @{ Name="Ted"; Age= 10; }
$o | Select -Property *
【讨论】:
试试这个:
PS Z:\> $o = @{}
PS Z:\> $o.Name = "Ted"
PS Z:\> $o.Age = 10
注意:您还可以将此对象作为Invoke-RestMethod 的-Body 包含在内,并且无需额外工作即可对其进行序列化。
注意下面的 cmets。这将创建一个哈希表。
【讨论】:
$o = [ordered]@{ Name = "Ted"; Age = 10 }
[ordered] 在这种情况下的用途。
$o.GetType()。在严格的 PS 模式下它不起作用,只有 $o['Name']。
$anon = @{ Name="Ted"; Age= 10; }。这可以从 PowerShell 5 向上实现。