【问题标题】:Modifying unix time variable in an array修改数组中的unix时间变量
【发布时间】:2016-11-15 21:54:34
【问题描述】:

我有一个带有列的对象,我需要将其从 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 属性修改为更易读的日期并将该值放回对象中?

【问题讨论】:

    标签: arrays powershell object


    【解决方案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)
        $_
    } 
    

    【讨论】:

    • 我使用的是 PS 5.0。我正在尝试您的建议,如果可行,我会通知您。
    • 成功了!你和我基本上做了同样的事情,但你比我高一级(AllAgents.agents,而我在 AllAgents.agents.last_scanned)。你能解释一下为什么你的方法行得通,而我的不行吗?
    • 好的,我认为这只是早期版本的限制,但可能有其他原因它不适用于这些对象,基本上是您尝试访问 $AllAgents.agents 的 .last_scanned 属性但 @987654326 @ 是一个数组,没有 .agents 属性。做你正在做的事情实际上适用于大多数 powershell 对象,所以我猜你使用的是旧版本,但如果你使用 5,那么我只能假设 $AllAgents 对象有些奇怪,但我不太清楚是什么。希望对您有所帮助。
    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2015-11-11
    相关资源
    最近更新 更多