我有一个对象,我需要从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属性修改为更易读的日期并将该值重新放回对象?
答案 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)
$_
}