Powershell condition if
chiwawa38
Messages postés
52
Date d'inscription
Statut
Membre
Dernière intervention
-
blux Messages postés 27997 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27997 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je suis actuellement en train de développer un petit script de sauvegarde, et j'aimerai ajouter une condition lors d'une erreur :
xcopy C:\test\ejfi D:\Backup /E /H /R /Y /I /D | select-string -pattern "introuvable" | if ($true)
{
instruction
}
mon dossier "efji" existe pas, et j'aimerai que lorsque le power shell repond : fichier introuvable, je puisse effectuer ma condition.
J'espère avoir été clair et je vous remercie d'avance pour votre aide.
Je suis actuellement en train de développer un petit script de sauvegarde, et j'aimerai ajouter une condition lors d'une erreur :
xcopy C:\test\ejfi D:\Backup /E /H /R /Y /I /D | select-string -pattern "introuvable" | if ($true)
{
instruction
}
mon dossier "efji" existe pas, et j'aimerai que lorsque le power shell repond : fichier introuvable, je puisse effectuer ma condition.
J'espère avoir été clair et je vous remercie d'avance pour votre aide.
4 réponses
Salut,
pourquoi tu n'utilises pas la fonction 'copy-item' ?
pourquoi tu n'utilises pas la fonction 'copy-item' ?
Copy-Item -Path $rep_src -Destination $rep_dst -recurse -force
if ($?)
{
# Si ok
}
else
{
# Si pas ok
}
Bonjour,
Je n'ai pas utilisé cette fonction car je ne la connaissais pas.
Du coup les options sont-elles les même ? Je veux faire une sauvegarde incrémentale qui récupère tous les dossiers même vides, les fichiers cachés etc...
En tout cas, ça semble plus complet que la commande "xcopy", plus destinée à des .bat.
Je vais essayer merci !
Je n'ai pas utilisé cette fonction car je ne la connaissais pas.
Du coup les options sont-elles les même ? Je veux faire une sauvegarde incrémentale qui récupère tous les dossiers même vides, les fichiers cachés etc...
En tout cas, ça semble plus complet que la commande "xcopy", plus destinée à des .bat.
Je vais essayer merci !
Pas d'incrémental...
Mais tu peux parfaitement faire un parcours de ton arborescence et boucler sur les fichiers à copier...
Ou regarder du côté de start-process si tu veux conserver ta commande avec le /d
Je jette un oeil pour voir comment on peut s'en sortir et je reviens dès que j'ai quelque chose.
Mais tu peux parfaitement faire un parcours de ton arborescence et boucler sur les fichiers à copier...
Ou regarder du côté de start-process si tu veux conserver ta commande avec le /d
Je jette un oeil pour voir comment on peut s'en sortir et je reviens dès que j'ai quelque chose.
c'est super sympa merci.
En fait quand je faisais mon xcopy, je générais un fichier log :
xcopy .... .... >> log.log
Puis-je faire la même chose ici ? (Je vais rechercher de la documentation dessus mais si tu es au courant, ce serait super.)
Mais pour résumé, ce script devra a terme, proposer une sauvegarde, générer un fichier log, si il y a une erreur, il doit envoyer un mail.
Jusqu'à la j'ai pu y arriver, mais c'est la condition qui me pose problème.
En tout cas, merci beaucoup pour l'aide que tu m'apportes.
En fait quand je faisais mon xcopy, je générais un fichier log :
xcopy .... .... >> log.log
Puis-je faire la même chose ici ? (Je vais rechercher de la documentation dessus mais si tu es au courant, ce serait super.)
Mais pour résumé, ce script devra a terme, proposer une sauvegarde, générer un fichier log, si il y a une erreur, il doit envoyer un mail.
Jusqu'à la j'ai pu y arriver, mais c'est la condition qui me pose problème.
En tout cas, merci beaucoup pour l'aide que tu m'apportes.
Salut,
Xcopy doit avoir des retours d'erreur qui lui sont propres... (derniere section dans le lien, ex avec robocopy ; mais ça ne t'empeche pas de tout lire ;) )
https://docs.microsoft.com/en-us/archive/blogs/
Tu peux donc utiliser la méthode try-catch ; avec plusieurs blocs catch en fonction des erreurs que tu veux "attraper".
Regarde la section ExitCode :
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb491035(v=technet.10)?redirectedfrom=MSDN
Xcopy doit avoir des retours d'erreur qui lui sont propres... (derniere section dans le lien, ex avec robocopy ; mais ça ne t'empeche pas de tout lire ;) )
https://docs.microsoft.com/en-us/archive/blogs/
Tu peux donc utiliser la méthode try-catch ; avec plusieurs blocs catch en fonction des erreurs que tu veux "attraper".
Regarde la section ExitCode :
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb491035(v=technet.10)?redirectedfrom=MSDN
Merci c'est ce que j'ai fais.
J'ai encore un problème, le dernier j'espère.
Alors, j'ai fais un jeu d'essai, et le fait que le disque destinataire n'a pas l'espace suffisant, n'est pas reconnu comme problème.
J'aimerai donc comparer les chaines de caractères du fichier Testsort2.txt (le fichier sortant) celui qui me prévient que l'espace n'est pas suffisant et si les chaines correspondent, alors j'execute l'instruction.
J'ai trouvé quelque bout de code, qui ne fonctionne pas :
Si tu as une idée ?
Bonne journée.
J'ai encore un problème, le dernier j'espère.
Alors, j'ai fais un jeu d'essai, et le fait que le disque destinataire n'a pas l'espace suffisant, n'est pas reconnu comme problème.
J'aimerai donc comparer les chaines de caractères du fichier Testsort2.txt (le fichier sortant) celui qui me prévient que l'espace n'est pas suffisant et si les chaines correspondent, alors j'execute l'instruction.
J'ai trouvé quelque bout de code, qui ne fonctionne pas :
$a = Get-Content "C:\test\Testsort2.txt"
$a | foreach {
if ($a -eq "disque insuffisant") {write-host = "ok"}
else {write-host = "Nok"}
}
Si tu as une idée ?
Bonne journée.
Bonjour à tous, j'en profite pour dire qu'il y a eu du progrès, mais comme d'habitude, une solution est toujours accompagné d'un problême :
Mon problême ici, c'est que la fenetre xcopy ne se ferme pas automatiquement lorsque ça marque "Espace disque insuffisant" du coup mon script ne peut pas continuer.
Le problême reste le même si j'enlève le -wait.
Voila, merci les solutions que vous pourrez m'apporter.
$a = Get-Content $Logtest
Start-Process "c:\windows\system32\xcopy.exe" -argumentlist $xcopy -RedirectStandardOutput $Logtest -RedirectStandardError $LogErreur -wait
if ($a -match "disque insuffisant")
{
Stop-Process -name xcopy
Get-Content $Logtest >> $LogErreurTmp
}
Mon problême ici, c'est que la fenetre xcopy ne se ferme pas automatiquement lorsque ça marque "Espace disque insuffisant" du coup mon script ne peut pas continuer.
Le problême reste le même si j'enlève le -wait.
Voila, merci les solutions que vous pourrez m'apporter.