Question
Exploitation log Robocopy
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16827
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Exploitation log Robocopy
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 .
[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.
- Xavier
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
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.
- Xavier
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16862
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Exploitation log Robocopy
Xavy écrit:
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...Si vous avez des pistes? je suis preneur.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Xavier
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
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.
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.
- Xavier
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
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.
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Exploitation log Robocopy