Question Condition simple (Résolu)

Plus d'informations
il y a 16 ans 6 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

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

Plus d'informations
il y a 16 ans 6 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))
{
\&quot;Fichier présent sur $($_.destination)\&quot;
}
else
{
\&quot;Fichier absent sur $($_.destination)\&quot;
}[/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.

\&quot;Just for fun\&quot;, une autre technique possible:

[code:1]
$fichier = join-path $_.destination la.bmp
if ([bool](dir $fichier -ea SilentlyContinue))
{
\&quot;Fichier $fichier trouvé\&quot;
}
else
{
\&quot;Fichier $fichier non trouvé\&quot;
}[/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.

Plus d'informations
il y a 16 ans 6 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 &lt;&lt;&lt;&lt; $_.destination la.bmp[/code:1]


de la meme maniere avec :

[code:1]if (test-path (join-path $_.destination la.bmp))
{
\&quot;Fichier présent sur $($_.destination)\&quot;
}
else
{
\&quot;Fichier absent sur $($_.destination)\&quot;
}[/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 &lt;&lt;&lt;&lt; $_.destination la.bmp))[/code:1]

Je cherche , je cherche.

En fait, ce n'est pas possible de concatener le \&quot;$_.destination\&quot; 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.

Plus d'informations
il y a 16 ans 6 mois #955 par Arnaud Petitjean
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

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 ?

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

Plus d'informations
il y a 16 ans 6 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 \&quot;D:\scripts\powershell\jpg\jpg.csv\&quot;
$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))
{
\&quot;Fichier thal1024.jpg présent sur $_.destination\&quot;
}
else
{
\&quot;Fichier thal1024.jpg absent sur $_.destination\&quot;
}
} &gt; d:\pow.txt

$csv | foreach {

if (test-path (join-path $_.destination thal1280.jpg))
{
\&quot;Fichier thal1280.jpg présent sur $_.destination\&quot;
}
else
{
\&quot;Fichier thal1280.jpg absent sur $_.destination\&quot;
}
} &gt;&gt; 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 :

Fichier thal1024.jpg présent sur @{destination=\\desktop112\c$\windows\web\wallpaper}.destination

... etc

Comment modifié au mieux ca ??
Merci
@+

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

Plus d'informations
il y a 16 ans 6 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 \&quot;D:\scripts\powershell\jpg\jpg.csv\&quot;

$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))
{
\&quot;Fichier thal1024.jpg présent sur $($_.destination)\&quot;
}
else
{
\&quot;Fichier thal1024.jpg absent sur $($_.destination)\&quot;
}

if (test-path (join-path $_.destination thal1280.jpg))
{
\&quot;Fichier thal1280.jpg présent sur $($_.destination)\&quot;
}
else
{
\&quot;Fichier thal1280.jpg absent sur $($_.destination)\&quot;
}
} &gt; 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.081 secondes
Propulsé par Kunena