2016-11-15 2 views
0

Ich habe ein Objekt mit einer Spalte, die ich von Unix-Zeit in eine "menschliche" Zeit konvertieren muss. Mein Objekt sieht so aus:Ändern der Unix-Zeitvariable in einem Array

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 

Die Spalte "last_scanned" muss geändert werden. Ich habe den folgenden Code:

$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($_) 
    $_ 
} 

Ausführen dieser Schleife ergibt folgende Fehler:

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 

Ich bin nicht sicher, warum Powershell die last_scanned Eigenschaft denkt nicht existiert, weil es eindeutig da. Wie kann ich die Eigenschaft last_scanned in ein lesbareres Datum ändern und diesen Wert wieder in das Objekt einfügen?

Antwort

1

Welche Version der Powershell verwenden Sie? Es sieht so aus, als ob Sie ein Array von Objekten unter der .agents-Eigenschaft haben, die dann jeweils ihre eigene .last_scanned-Eigenschaft haben, Version 3+ erlaubt Ihnen, auf untergeordnete Eigenschaften von Array-Mitgliedern zuzugreifen, aber Version 2 nicht, funktioniert das für Sie?

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

Ich benutze PS 5.0. Ich versuche gerade Ihren Vorschlag und ich werde Sie wissen lassen, ob es funktioniert. – Tchotchke

+0

das hat den Trick gemacht! Du und ich haben das Gleiche gemacht, aber du warst eine Stufe höher als ich (AllAgents.agents, während ich bei AllAgents.agents.last_scanned war). Kannst du erklären, warum dein Weg funktioniert, aber meiner nicht? – Tchotchke

+1

Ok Ich dachte, es war nur eine Einschränkung mit früheren Versionen, aber es könnte einen anderen Grund geben, dass es nicht für diese Objekte funktioniert, im Grunde versucht man auf die '.last_scanned' Eigenschaft von' $ AllAgents.agents' zuzugreifen, aber '$ AllAgents.agents 'ist ein Array und hat keine Eigenschaft' .agents'. Das zu tun, was Sie getan haben, funktioniert tatsächlich mit den meisten Powershell-Objekten, daher vermutete ich, dass Sie eine ältere Version hatten, aber wenn Sie 5 verwenden, kann ich nur annehmen, dass es etwas Seltsames an den $ AllAgents-Objekten ist. Ich hoffe, das hilft. –

Verwandte Themen