修改数组

时间:2016-11-15 21:54:35

标签: arrays powershell object

我有一个对象,我需要从Unix时间转换为“人类”时间。我的对象看起来像这样:

PS C:\Windows\system32\WindowsPowerShell\v1.0> $AllAgents.agents[0..2] | Format-Table

last_scanned ip              distro     platform name            uuid                                                  id
------------ --              ------     -------- ----            ----                                                  --
1460167223   192.168.118.101 win-x86-64 WINDOWS  COMPUTER-1      648f8f4f-8afa-029d-424f-fb27a8e345f8e2fdef184343058e 101
1460167223   192.168.118.145 win-x86-64 WINDOWS  COMPUTER-2      0a33a831-fa47-1fdc-2c21-2a079c728a88bcf6186e275a9135 152
1460167223   192.168.118.26  win-x86-64 WINDOWS  COMPUTER-3      738c0d3a-d2d5-447c-c671-b248180c3b3f75efb734be3d547d 359   

“last_scanned”列是我需要更改的内容。我有以下代码:

$Origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
$AllAgents.agents.last_scanned = $AllAgents.agents.last_scanned | ForEach-Object {
    $_ = $Origin.AddSeconds($_)
    $_
}

执行此循环会导致以下错误:

The property 'last_scanned' cannot be found on this object. Verify that the property exists and can be set.
At U:\Powershell\Scripts\Nessus API - Get All Agents From a Group.ps1:55 char:1
+ $AllAgents.agents.last_scanned = $AllAgents.agents.last_scanned | For ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

我不确定为什么PowerShell认为last_scanned属性不存在,因为它显然存在。如何将last_scanned属性修改为更易读的日期并将该值重新放回对象?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的powershell?看起来你有一个.agents属性下的对象数组,然后每个属性都有自己的.last_scanned属性,版本3+允许你访问数组成员的子属性,但版本2没有,这项工作适合你?

$Origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
$AllAgents.agents = $AllAgents.agents | ForEach-Object {
    $_.LastScanned = $Origin.AddSeconds($_.LastScanned)
    $_
}