Question
Condition simple (Résolu)
- balek
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 71
- Remerciements reçus 0
il y a 15 ans 8 mois #951
par balek
Condition simple (Résolu) a été créé par balek
Bonjour,
Je voudrais faire une condition toute bete :
Si le fichier la.jpg existe dans le repertoire c:\windows\web\wallpaper alors écrit \"ok\" dans d:\ok.txt
Le but serait de l'integrer dans le debut de mon script :
[code:1]$csv = import-Csv \"D:\scripts\powershell\jpg\jpg.csv\"
$csv | foreach { copy-item D:\scripts\powershell\jpg\la.bmp -destination $_.destination}[/code:1]
Je veux donc copier le meme fichier depuis un serveur sur chaque pc mais avoir un log afin de savoir si le fichier à bien été copié.
Merci d'avance.
Message édité par: Arnaud, à: 17/09/07 18:46<br><br>Message édité par: Arnaud, à: 27/09/07 00:13
Je voudrais faire une condition toute bete :
Si le fichier la.jpg existe dans le repertoire c:\windows\web\wallpaper alors écrit \"ok\" dans d:\ok.txt
Le but serait de l'integrer dans le debut de mon script :
[code:1]$csv = import-Csv \"D:\scripts\powershell\jpg\jpg.csv\"
$csv | foreach { copy-item D:\scripts\powershell\jpg\la.bmp -destination $_.destination}[/code:1]
Je veux donc copier le meme fichier depuis un serveur sur chaque pc mais avoir un log afin de savoir si le fichier à bien été copié.
Merci d'avance.

Message édité par: Arnaud, à: 17/09/07 18:46<br><br>Message édité par: Arnaud, à: 27/09/07 00:13
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 8 mois #953
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Condition simple
Salut Balek,
Tu peux très simplement tester la présence d'un fichier avec la commandelette test-path:
[code:1]
if (test-path (join-path $_.destination la.bmp))
{
\"Fichier présent sur $($_.destination)\"
}
else
{
\"Fichier absent sur $($_.destination)\"
}[/code:1]
J'ai également utilisé join-path pour faire la concaténation du chemin complet du fichier copié, d'autres techniques auraient été possibles.
\"Just for fun\", une autre technique possible:
[code:1]
$fichier = join-path $_.destination la.bmp
if ([bool](dir $fichier -ea SilentlyContinue))
{
\"Fichier $fichier trouvé\"
}
else
{
\"Fichier $fichier non trouvé\"
}[/code:1]
Cette technique exploite la gestion des erreurs et des codes retours disponibles dans PowerShell. Pour info, le paramètre -ea est l'abréviation de -ErrorAction, paramètre commun à toutes les commandelettes qui permet de déterminer comment elles se doivent se comporter en cas d'erreur.
En espérant avoir répondu à ta question,
Janel<br><br>Message édité par: janel, à: 17/09/07 19:02
Tu peux très simplement tester la présence d'un fichier avec la commandelette test-path:
[code:1]
if (test-path (join-path $_.destination la.bmp))
{
\"Fichier présent sur $($_.destination)\"
}
else
{
\"Fichier absent sur $($_.destination)\"
}[/code:1]
J'ai également utilisé join-path pour faire la concaténation du chemin complet du fichier copié, d'autres techniques auraient été possibles.
\"Just for fun\", une autre technique possible:
[code:1]
$fichier = join-path $_.destination la.bmp
if ([bool](dir $fichier -ea SilentlyContinue))
{
\"Fichier $fichier trouvé\"
}
else
{
\"Fichier $fichier non trouvé\"
}[/code:1]
Cette technique exploite la gestion des erreurs et des codes retours disponibles dans PowerShell. Pour info, le paramètre -ea est l'abréviation de -ErrorAction, paramètre commun à toutes les commandelettes qui permet de déterminer comment elles se doivent se comporter en cas d'erreur.
En espérant avoir répondu à ta question,
Janel<br><br>Message édité par: janel, à: 17/09/07 19:02
Connexion ou Créer un compte pour participer à la conversation.
- balek
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 71
- Remerciements reçus 0
il y a 15 ans 8 mois #954
par balek
Réponse de balek sur le sujet Re:Condition simple
Merci pour ton aide, je ne connaissait pas la commande test-path.
MAis ca ne marche pas avec l'utilisation de $_.destination.
Qd je fais un [code:1]test-path c:\windows\toto.jpg[/code:1]
J'ai bien la valeur true en reponse mais lorsque je met :
[code:1]test-path $_.destination la.bmp[/code:1]
J'ai l'erreur :
[code:1]Test-Path : Impossible de lier l'argument au paramètre « Path », car il a la valeur Null.
Au niveau de ligne : 1 Caractère : 10
+ Test-Path <<<< $_.destination la.bmp[/code:1]
de la meme maniere avec :
[code:1]if (test-path (join-path $_.destination la.bmp))
{
\"Fichier présent sur $($_.destination)\"
}
else
{
\"Fichier absent sur $($_.destination)\"
}[/code:1]
j'ai
[code:1]Join-Path : Impossible de lier l'argument au paramètre « Path », car il a la valeur Null.
Au niveau de D:\scripts\powershell\jpg\cond2.ps1 : 1 Caractère : 25
+ if (test-path (join-path <<<< $_.destination la.bmp))[/code:1]
Je cherche , je cherche.
En fait, ce n'est pas possible de concatener le \"$_.destination\" et un fichier image pour faire un chemin complet.
Message édité par: balek, à: 18/09/07 10:21<br><br>Message édité par: balek, à: 18/09/07 10:57
MAis ca ne marche pas avec l'utilisation de $_.destination.
Qd je fais un [code:1]test-path c:\windows\toto.jpg[/code:1]
J'ai bien la valeur true en reponse mais lorsque je met :
[code:1]test-path $_.destination la.bmp[/code:1]
J'ai l'erreur :
[code:1]Test-Path : Impossible de lier l'argument au paramètre « Path », car il a la valeur Null.
Au niveau de ligne : 1 Caractère : 10
+ Test-Path <<<< $_.destination la.bmp[/code:1]
de la meme maniere avec :
[code:1]if (test-path (join-path $_.destination la.bmp))
{
\"Fichier présent sur $($_.destination)\"
}
else
{
\"Fichier absent sur $($_.destination)\"
}[/code:1]
j'ai
[code:1]Join-Path : Impossible de lier l'argument au paramètre « Path », car il a la valeur Null.
Au niveau de D:\scripts\powershell\jpg\cond2.ps1 : 1 Caractère : 25
+ if (test-path (join-path <<<< $_.destination la.bmp))[/code:1]
Je cherche , je cherche.
En fait, ce n'est pas possible de concatener le \"$_.destination\" et un fichier image pour faire un chemin complet.
Message édité par: balek, à: 18/09/07 10:21<br><br>Message édité par: balek, à: 18/09/07 10:57
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 15 ans 8 mois #955
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Réponse de Arnaud Petitjean sur le sujet Re:Condition simple
Salut Balek,
$_ te sers à récupérer une valeur à travers le pipe, donc si tu ne récupères aucune donnée par le pipe il ne faut pas t'en servir.
Par contre, dans ton cas je pense que :
[code:1]test-path $csv.destination[/code:1]
devrait convenir.
Arnaud<br><br>Message édité par: Arnaud, à: 18/09/07 11:05
$_ te sers à récupérer une valeur à travers le pipe, donc si tu ne récupères aucune donnée par le pipe il ne faut pas t'en servir.
Par contre, dans ton cas je pense que :
[code:1]test-path $csv.destination[/code:1]
devrait convenir.
Arnaud<br><br>Message édité par: Arnaud, à: 18/09/07 11:05
MVP PowerShell et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Connexion ou Créer un compte pour participer à la conversation.
- balek
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 71
- Remerciements reçus 0
il y a 15 ans 8 mois #956
par balek
Réponse de balek sur le sujet Re:Condition simple
Re,
j'ai pas mal avancé mais il y a surement moyen de faire plus court que ca :
[code:1]$csv = import-Csv \"D:\scripts\powershell\jpg\jpg.csv\"
$csv | foreach { copy-item D:\scripts\powershell\jpg\thal1280.jpg -destination $_.destination}
$csv | foreach { copy-item D:\scripts\powershell\jpg\thal1024.jpg -destination $_.destination}
$csv | foreach {
if (test-path (join-path $_.destination thal1024.jpg))
{
\"Fichier thal1024.jpg présent sur $_.destination\"
}
else
{
\"Fichier thal1024.jpg absent sur $_.destination\"
}
} > d:\pow.txt
$csv | foreach {
if (test-path (join-path $_.destination thal1280.jpg))
{
\"Fichier thal1280.jpg présent sur $_.destination\"
}
else
{
\"Fichier thal1280.jpg absent sur $_.destination\"
}
} >> d:\pow.txt[/code:1]
Ca copie bien mes deux fichiers puis rempli un log .
Mais dans mon log, je n'arrive pas à reduire la phrase. J'ai toujours :
Comment modifié au mieux ca ??
Merci
@+
j'ai pas mal avancé mais il y a surement moyen de faire plus court que ca :
[code:1]$csv = import-Csv \"D:\scripts\powershell\jpg\jpg.csv\"
$csv | foreach { copy-item D:\scripts\powershell\jpg\thal1280.jpg -destination $_.destination}
$csv | foreach { copy-item D:\scripts\powershell\jpg\thal1024.jpg -destination $_.destination}
$csv | foreach {
if (test-path (join-path $_.destination thal1024.jpg))
{
\"Fichier thal1024.jpg présent sur $_.destination\"
}
else
{
\"Fichier thal1024.jpg absent sur $_.destination\"
}
} > d:\pow.txt
$csv | foreach {
if (test-path (join-path $_.destination thal1280.jpg))
{
\"Fichier thal1280.jpg présent sur $_.destination\"
}
else
{
\"Fichier thal1280.jpg absent sur $_.destination\"
}
} >> d:\pow.txt[/code:1]
Ca copie bien mes deux fichiers puis rempli un log .
Mais dans mon log, je n'arrive pas à reduire la phrase. J'ai toujours :
... etcFichier thal1024.jpg présent sur @{destination=\\desktop112\c$\windows\web\wallpaper}.destination
Comment modifié au mieux ca ??
Merci
@+
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 8 mois #960
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Condition simple
Quand tu veux accéder au membre d'une variable dans une chaîne de caractères, tu dois l'encadrer dans $(). Regarde attentivement mes exemples, tu verras que mes messages ont une syntaxe différente de la tienne.
Sinon, tu devrais pouvoir tout regrouper dans un seul foreach. Est-ce que le code suivant marche?
[code:1]
$csv = import-Csv \"D:\scripts\powershell\jpg\jpg.csv\"
$csv | foreach {
copy-item D:\scripts\powershell\jpg\thal1280.jpg -destination $_.destination
copy-item D:\scripts\powershell\jpg\thal1024.jpg -destination $_.destination
if (test-path (join-path $_.destination thal1024.jpg))
{
\"Fichier thal1024.jpg présent sur $($_.destination)\"
}
else
{
\"Fichier thal1024.jpg absent sur $($_.destination)\"
}
if (test-path (join-path $_.destination thal1280.jpg))
{
\"Fichier thal1280.jpg présent sur $($_.destination)\"
}
else
{
\"Fichier thal1280.jpg absent sur $($_.destination)\"
}
} > d:\pow.txt[/code:1]
Janel<br><br>Message édité par: janel, à: 18/09/07 17:40
Sinon, tu devrais pouvoir tout regrouper dans un seul foreach. Est-ce que le code suivant marche?
[code:1]
$csv = import-Csv \"D:\scripts\powershell\jpg\jpg.csv\"
$csv | foreach {
copy-item D:\scripts\powershell\jpg\thal1280.jpg -destination $_.destination
copy-item D:\scripts\powershell\jpg\thal1024.jpg -destination $_.destination
if (test-path (join-path $_.destination thal1024.jpg))
{
\"Fichier thal1024.jpg présent sur $($_.destination)\"
}
else
{
\"Fichier thal1024.jpg absent sur $($_.destination)\"
}
if (test-path (join-path $_.destination thal1280.jpg))
{
\"Fichier thal1280.jpg présent sur $($_.destination)\"
}
else
{
\"Fichier thal1280.jpg absent sur $($_.destination)\"
}
} > d:\pow.txt[/code:1]
Janel<br><br>Message édité par: janel, à: 18/09/07 17:40
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
- Condition simple (Résolu)