2017-04-18 95 views
1

我有一個從另一個系統導出的幾千個自定義PS對象的列表,並且所有這些自定義對象都在變量$queryResult中。系統使用以毫秒爲單位的歷元時間格式的字段time導出這些對象(例如:1492536777453 = 2017年4月18日星期二下午1:32:57 PM)。我需要將自定義對象中的所有這些time字段更改爲人類可讀的時間。我已經有那個時代的時間轉換爲人類可讀的函數:修改許多自定義PowerShell對象

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"." 

我理解,因爲我的轉換函數需要兩倍我收到這個錯誤,但是如何我是否可以改變它以期望正確的數據類型,或者找到另一種方法來做到這一點?

+2

值使用'='設置。它在哪裏? (除了未使用的哈希表) –

+1

你可以使用'Select-Object','Foreach-Object'和'New-Object'的組合,我想這可以在一個管道中完成。你已經擁有它的主要部分。 – sodawillow

+0

謝謝@FrodeF,那是一個愚蠢的錯誤!我更新了我的帖子,以反映我在哪裏試過'=' – hbteibet

回答

1

所以在@FrodeF和@sodawillow的幫助下,我已經想出瞭如何更新實際對象內的值!以下是我需要添加的行。

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

您應該在調用PowerShell函數時避免parens;它適用於一個參數,但它不會像您期望的那樣適用於多個參數,它會將它們全部作爲第一個參數傳遞。 – TessellatingHeckler

相關問題