修改许多自定义PowerShell对象

时间:2017-04-18 19:10:23

标签: powershell

我有一个从另一个系统导出的数千个自定义PS对象的列表,所有这些自定义对象都在变量$queryResult中。系统使用以毫秒为单位的纪元时间格式的字段time导出这些对象(例如:1492536777453 = 2017年4月18日星期二,下午1:32:57)。我需要将自定义对象中的所有这些time字段更改为人类可读时间。我已经有一个将纪元时间转换为人类可读的函数:

Function Convert-FromUnixDate ($UnixDate) {[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddMilliSeconds($UnixDate))}

我也想出了如何转换所有这些,但是这只返回一个时间列表(显然),我无法弄清楚如何更新实际的自定义对象:

foreach ($i in $queryResult.events.time){$humanReadable = @{};Convert-FromUnixDate $i}

我的问题是我想更新每个PS自定义对象中的实际值,这样,当我将所有对象导出到最终用户的excel文件时,它们是可读的。非常感谢您的帮助!

修改

我忘了提及当我尝试更新值时会发生什么。我在下面尝试了这个声明:

$aqlQueryResult.events.starttime = Convert-FromUnixDate ($aqlQueryResult.events.starttime)

当我尝试时,我收到以下错误:

Cannot convert argument "value", with value: "System.Object[]", for 
"AddMilliseconds" to type "System.Double": "Cannot convert the 
"System.Object[]" value of type "System.Object[]" to type "System.Double"."

我理解我收到此错误是因为我的转换函数需要一个double,但我怎么能改变它以期望正确的数据类型,或者找到另一种方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

所以在@FrodeF和@sodawillow的帮助下,我已经想出了如何更新实际对象中的值!以下是我需要添加的行。

$queryResult.events | ForEach-Object {$_.time = (Convert-FromUnixDate ($_.time))}