2012-09-11 4 views
0

Matin Tous,Powershell interrogation variable de différence de date et heure

J'ai une variable comme suit: $machines = $user2,$name,$serial,$purchased données d'échantillon stockées dans les machines $ est:

User1, 
Laptop1, 
xyz1234, 
01/01/2010 

Je suis désireux de créer une nouvelle variable appelé $ tobereplaced contenant tous les enregistrements dans $ machines avec une date supérieure à 4 ans à compter de la date d'aujourd'hui.

le code de logique floue pour ce que je m'attends à être quelque chose comme $tobereplaced = $machines.$purchased | where {$_$purchased = -getdate > 4 years} etc etc, mais je ne peux pas tout à fait comprendre.

L'assistance serait grandement appréciée.

Merci

Répondre

2
$fourYearsAgo = (Get-Date).AddYears(-4) 
$tobereplaced = $machines | Where-Object { (Get-Date $_[-1]) -le $fourYearsAgo } 
+0

J'essaye d'implémenter ce code mais $ machines contient 4 variables au total donc j'espérais analyser la variable $ achetée de $ machines dans une nouvelle variable si la date est supérieure à 4 ans. Mon format de date est le 18/03/2009 mais il y a $ quatre ans est le 11 septembre 2008 13:15:50. Je vais avoir environ 500 lignes dans $ machines et je souhaite stocker les 100 enregistrements qui ont $ acheté variable dans $ machines il y a plus de 4 ans dans une autre variable. – meeeeeeeeee

+0

Toutes les valeurs sont-elles des chaînes? Je vous suggère de créer un nouvel objet pour chaque ligne avec les propriétés correspondantes (castées) afin que vous puissiez filtrer les objets plus facilement. –

+0

$ acheté est rempli avec le code suivant donc il devrait être un datetime, le reste sont des chaînes - $ dt = [datetime] :: ParseExact ($ prog2, "aaaa/MM/jj", $ null) $ acheté = Get-Date $ dt -Format 'jj/MM/aaaa' – meeeeeeeeee

1

Convertir la date DateTime et le comparer à une date il y a quatre ans. Comme si,

# Assuming $m[3] contains the timestamp, parse it as a DateTime and compare 
# against a date four years ago. 
if([DateTime]::Parse($m[3]) -le [DateTime]::Now.AddYear(-4)) { 
    $tobereplaced += $m 
} 

En fonction de vos paramètres régionaux, vous pourriez avoir besoin de dire [DateTime]::Parse() comment analyser la date. Le 01/12/2010 1er décembre 2010 ou le 12 janvier 2010?

+0

Le 1er décembre – meeeeeeeeee

+0

Est-ce que $ m [3] est la troisième variable dans $ m? c'est-à-dire si la date est le troisième enregistrement – meeeeeeeeee

+0

Si oui, je reçois la chaîne n'a pas été reconnu comme une date-heure valide (im using $ machines [4] ie $ acheté qui contient 24/08/2010) – meeeeeeeeee