Powershell 转换数组中所有对象的属性数据类型

Powershell 转换数组中所有对象的属性数据类型,powershell,powershell-5.0,Powershell,Powershell 5.0,假设我有一个对象数组: $a = @( @{ Name = "A"; Value = "2016-01-02" }, @{ Name = "B"; Value = "2016-01-03" }, @{ Name = "C"; Value = "2016-01-04" } ) 值属性当前是一个字符串。我想将每个对象的值属性转换为日期时间。我可以通过for循环来实现这一点,但我想知道是否有更直接的方法来实现这一点。这将把第一个对象值的数据类型更改为datetime $a[0

假设我有一个对象数组:

$a = @(
    @{ Name = "A"; Value = "2016-01-02" },
    @{ Name = "B"; Value = "2016-01-03" },
    @{ Name = "C"; Value = "2016-01-04" }
)

属性当前是一个
字符串
。我想将每个对象的
属性转换为
日期时间
。我可以通过
for
循环来实现这一点,但我想知道是否有更直接的方法来实现这一点。

这将把第一个对象值的数据类型更改为datetime

$a[0].value = [datetime]::ParseExact($a[0].value,'yyyy-MM-dd',$null)
从这里开始循环:

foreach ($Obj in $a)
    {
    $Obj.Value = [datetime]::ParseExact($Obj.value,'yyyy-MM-dd',$null)
    }
您接受的@TessellingHeckler的答案与您的问题不符!它只是更改对象中数据的表示形式,而不是按要求进行转换。即使将其保存为新对象(或覆盖原始对象),也会更改对象本身。如果运行流动代码,则可以看到差异:

$b=$a | select @{N='Name';E={$_.Name}}, @{N='Value';E={ [datetime]$_.Value }}
#check the original and converted object
$a|gm
$b|gm

是的,计算属性

$a | select @{N='Name';E={$_.Name}}, @{N='Value';E={ [datetime]$_.Value }}

正是我想要的。我在
Sort Object-Property…
expressions中使用了非常类似的东西来按某个表达式而不是对象上的某个属性进行排序。我看到了其他示例(在看到这个答案后),它们使用“Name”而不是“N”,使用“expression”而不是“E”。我做了测试,两种方法都有效。但是,其他缩写词(如“Nm”和“Exp”)不起作用——为了简洁起见,我将使用“N”和“e”。@neizan您可以使用最短的明确版本(这也适用于函数/cmdlet的参数),因此
Exp
可以,而
Nm
不是,
N
Na
Nam
都能用。@briantist啊!我不知道。谢谢