Question Exploitation log Robocopy

Plus d'informations
il y a 12 ans 1 mois #16827 par Laurent Dardenne
Essaie ceci:
[code:1]

function Format-Highlight
{
[cmdletbinding()]
param(
[parameter(Mandatory=$true, position=0)]
[scriptblock]
$filter,

[parameter(ValueFromPipeline=$true)]
$input
)

process
{
$input |
foreach {
if( &$filter )
{ $_ |
Add-Member -mem noteproperty -name writeerrorstream -value $true
}
$_
}
}
}#Format-Highlight

#propriété de lecture du fichier
$A=New-Object PSObject -Property @{
Debut=Get-Date -Format T;
Fin=$Null;
ExitReason='Echec de la copie.';
ExitCode=9;
Etat='CRITICAL'
Source='C:\Users\robertx\Desktop\script\source_destination'
}
$B=New-Object PSObject -Property @{
Debut=Get-Date -Format T;
Fin=$Null;
ExitReason=\"Copie OK. Aucun changement.\";
ExitCode=0;
Etat=\"SUCCESS\"
Source='C:\Users\robertx\Desktop\script\Dest2'
}
$C=New-Object PSObject -Property @{
Debut=Get-Date -Format T;
Fin=$Null;
ExitReason='Echec de la copie.';
ExitCode=8;
Etat='CRITICAL'
Source='C:\Users\robertx\Desktop\script\destination3'
}

$A,$B,$C|format-highlight {$_.ExitCode -ge 8}|Format-Table Source, Etat, Debut, Fin, Exitcode -auto
[/code:1]
Quant à l'option /TEE, essaie en manipulant les redirections de PS, l'affichage sur la console ne concerne pas le pipeline.
Consulte les exemples du chapitre 9.3 de ce tutoriel .

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 1 mois #16829 par Xavier
Réponse de Xavier sur le sujet Re:Exploitation log Robocopy
Merci à vous. Cette fonction Format HighLight vraiment intéressant.

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

Plus d'informations
il y a 12 ans 1 mois #16861 par Xavier
Réponse de Xavier sur le sujet Re:Exploitation log Robocopy
Bonjour, J'ai réussi entre autre à exploiter le résultat de robocopy pour affichier les éléments que je veux dans un tableau.

Mon code :
[code:1]$Result = robocopy $O.Source /MIR /SEC /R:1 /W:1 /XF \"C:\Users\robertx\Desktop\Cartographies 2013\sauvegarde.vsd\" /XD \"C:\Users\robertx\Desktop\Cartographies 2013\good\" /log+:d:\log.txt /NJH /NFL /NDL /L /TEE

$tableau = @()
$Result = $Result -replace(\" \",\" \"«»)
$Result = $Result -replace(\" \",\" \"«»)
$Result = $Result -replace(\" \",\" \"«»)
$Result = $Result -replace(\" : \",\" \"«»)
$Result = $Result -replace(\" m\",\"m\"«»)
$Result = $Result -replace(\" k\",\"k\"«»)
$Result = $Result -replace(\" g\",\"g\"«»)
$Result = $Result -replace(\" O\",\"O\"«»)



Foreach($Res in $Result)
{
$ligne = $Res -split(\" \"«»)
$obj = New-Object Psobject

if ($ligne[0].Contains(\"Fichier\"«»))
{
$Nb_Fic=$ligne[1]
$Nb_Fic_Copy=$ligne[2]
$Nb_Fic_Err=$ligne[5]
}
elseif ($ligne[0].Contains(\"Octets\"«»))
{
$Nb_Oct=$ligne[1]
$Nb_Oct_Copy=$ligne[2]
$Nb_Oct_Err=$ligne[5]
}
$obj | Add-Member -Name \"Nb_Fic\" -membertype Noteproperty -Value $Nb_Fic
$obj | Add-Member -Name \"Nb_Fic_Copy\" -membertype Noteproperty -Value $Nb_Fic_Copy
$obj | Add-Member -Name \"Nb_Fic_Err\" -membertype Noteproperty -Value $Nb_Fic_Err
$obj | Add-Member -Name \"Nb_Oct\" -membertype Noteproperty -Value $Nb_Oct
$obj | Add-Member -Name \"Nb_Oct_Copy\" -membertype Noteproperty -Value $Nb_Oct_Copy
$obj | Add-Member -Name \"Nb_Oct_Err\" -membertype Noteproperty -Value $Nb_Oct_Err
$tableau += $obj
}
$tableau | ft -auto[/code:1]

Je rencontre cependant un nouveau problème... je fais actuellement deux copies distinctes, donc normalement en terme de logique mon tableau devrait afficher deux lignes avec les éléments sélectionnés. Or ici il m'affiche plusieurs lignes avec le même résultat. C'est un problème avec ma boucle foreach sûrement.
J'ai essayé d'initialiser le tableau hors de ma boucle foreach et là juste une seule ligne s'affiche...
Si vous avez des pistes? je suis preneur.
Pièces jointes :

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

Plus d'informations
il y a 12 ans 1 mois #16862 par Laurent Dardenne
Xavy écrit:

Si vous avez des pistes? je suis preneur.

Tu peux déjà utiliser Write-Debug et ajouter provisoirement la ligne et le numéro de ligne à ton objet. Et peut être que tes variables doivent être réinitialisées entre deux appels...

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 1 mois #16870 par Xavier
Réponse de Xavier sur le sujet Re:Exploitation log Robocopy
C'est bon j'ai réussi à trouver mon erreur merci.

Les différentes variables faisant référence à mon tableau était mal situé au niveau de l'organigramme de mon programme.

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

Plus d'informations
il y a 12 ans 1 mois #16871 par Xavier
Réponse de Xavier sur le sujet Re:Exploitation log Robocopy
Question au niveau de mon script (oui encore...)

Actuellement je récupère dans mon fichier.txt tous les chemins de destination pour ma copie ligne/ligne dans une seule variable. Est-il possible de mettre chaque chemin destination dans une variable différente?

Le but de mon problème est de pouvoir simplifié la lecture du chemin destination au lieu d'avoir le chemin complet de la copie juste avoir le nom du serveur.

[code:1]$resultat = Get-Content C:\Users\robertx\Desktop\script\source_destination.txt | ForEach-Object {

#propriété de lecture du fichier
$O=New-Object PSObject -Property @{
Debut=Get-Date -Format T;
Fin=$Null;
ExitCode=0;
Etat=$Null
Source=$_

$Result = robocopy $O.Source /MIR /SEC /R:1 /W:1 /XF \"C:\Users\robertx\Desktop\Cartographies 2013\sauvegarde.vsd\" /XD \"C:\Users\robertx\Desktop\Cartographies 2013\good\" /log+:d:\log.txt /NFL /NDL /TEE
}[/code:1]

Encore désolé pour tout le dérangement.

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

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