Question Comp. d'objets : différences de résultats (Résolu)

Plus d'informations
il y a 17 ans 11 mois #2073 par sonic
Bon j'ai commencé le livre , c'est super .
Bref j'ai un petit problème qui me fait un peu car si ca fontionne pas je vais avoir beaucoup de boulot a refaire et vite :huh:
En fait actuellement mon script tourne en boucle infini . Je voudrait donc stoker un objet pour le charger a chaque itération . Du coup plus besoin de la boucle infinit . sauf que ca ne fonctionne pas !!
Je fait un :[code:1]get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}[/code:1] que je veux stoker sur disque, mais quand je le recharge et que je l'utilse ca fonctionne pas . Si je recrée la variable avec la comande sans l'export import ca fonctionne .

Voila:
J'ai $ancien
[code:1]
get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0} | export-clixml $reptrv\tutu.xml
$ancien = import-clixml $reptrv\tutu.xml
[/code:1]
et $ancien2
[code:1]
$ancien2 =get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}
[/code:1]
Je pensait que cela devait me donner le meme objets sauf $ancien2 en mort pour car venant de xml , il ne change plus quoi ! C'est ce que je voulais .
Je regarde les 2 objets , il semble identique mais ca fonctionne pas .
Sans passé par export/import ca fonctionne avec non.
Au lieu du resultat j'ai les message d'erreur qui suivent quand je l'utilise :
[code:1]PS C:\dev> $t=$ancien | where-object {((get-childitem $rep -r $_) -eq $null)}
Get-ChildItem : Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié c
omplet doit comprendre moins de 260 caractères et le nom du répertoire moins de 248 caractères.
Au niveau de ligne : 1 Caractère : 43
+ $t=$ancien | where-object {((get-childitem <<<< $rep -r $_) -eq $null)}
Get-ChildItem : Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié c
omplet doit comprendre moins de 260 caractères et le nom du répertoire moins de 248 caractères.
Au niveau de ligne : 1 Caractère : 43
+ $t=$ancien | where-object {((get-childitem <<<< $rep -r $_) -eq $null)}[/code:1]
Je ne comprend pas du tout :blink: .
Help svp

Message édité par: sonic31, à: 2/04/08 22:43<br><br>Message édité par: Arnaud, à: 28/04/08 14:36

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2075 par sonic
J'utilise aussi :

get-date |export-clixml $reptrv\anciendate.xml
suivit d'un
$derniercheck = import-clixml $reptrv\anciendate.xml

Qui lui, semble fonctionner quand je m'en ser .

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2079 par Laurent Dardenne
Salut,
j'ai pas trop compris ce que tu souhaites faire :S
Quand tu parles d'objet, c'est bien une collection d'objets que tu manipules. En qq sorte tu prends une \&quot;photo\&quot; du contenu d'un répertoire ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2081 par sonic
Exactement .
Je prend une photos avant du contenu du répertoire . Je récupére l'objet sur disque en xml ,et le scripts s'arréte .
Ensuite je relance le script et je me ser de la photos avant (import de l'objet) pour des comparaisons avec l'etat actuel .

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2087 par Laurent Dardenne
sonic31 écrit:

je me ser de la photos avant (import de l'objet) pour des comparaisons avec l'etat actuel .

D'accord. C'est bien ce que cette instruction est sensé faire ?
[code:1]
where-object {((get-childitem $rep -r $_) -eq $null)}
[/code:1]

Si tu souhaites réaliser des comparaisons, il vaut mieux récupérer le nouveau contenu une seule fois
[code:1]
$New=get-childitem $rep -r
[/code:1]
Ensuite faire qq chose comme
[code:1]
$ancien | where-object { $news -contains $_}
#l'inverse
$ancien | where-object { !($news -contains $_)}
#un peu de détail
$ancien | where-object { !($news -contains $_)}| %{$_.name}
[/code:1]
Ensuite cela dépend des critéres de comparaison sur lesquels tu veux travailler, reste à savoir s'il est possible de récupérer de la collection $New l'elément à comparer avec $_ ...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2088 par Laurent Dardenne
Il est préférable d'utiliser le Cmdlet Compare-Object :
[code:1]
Compare-Object $Ancien $New -property LastWriteTime -passthru|? {$_.SideIndicator -eq \&quot;=&gt;\&quot;}
[/code:1]
Je te laisse creuser le sujet.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena