Question Boucle

Plus d'informations
il y a 6 ans 9 mois #29026 par asceltis
Boucle a été créé par asceltis
Bonjour,
je débute totalement dans le scripting powershell, j'aurai besoin de votre aide. Je dois vérifier la présence de plusieurs fichiers, j'étais donc partie sur cela :
[code:1]#Déclaration des fichiers à chercher
$dump1 = \"toto1.dmp\"
$dump2 = \"toto2.dmp\"
$dump3 = \"toto3.dmp\"
if ((test-path \"D:\\$dump1\"«») -eq $false)
{Write-Host $dump1 \"Absent\"}
else {
$File=Get-ChildItem \"D:\\$dump1\"
Write-Host $dump1 \"- Présent\" \"- Date :\" $File.LastWriteTime
}[/code:1]

je suppose qu'il y a moyen de faire cette commande pour tous les variables déclarées en premier avec mise en place d'une boucle, mais je sèche :s
je vous remercie pour votre concours

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

Plus d'informations
il y a 6 ans 9 mois #29027 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Boucle
Salut,
essaie ceci :
[code:1]

$dump1 = \"toto1.dmp\"
$dump2 = \"toto2.dmp\"
$dump3 = \"toto3.dmp\"

$dump1,$dump2,$dump3|
ForEach-Object{
if ((test-path \"D:\\$_\"«») -eq $false)
{ Write-Host $_ \"Absent\" }
else {
$File=Get-ChildItem \"D:\\$_\"
Write-Host $_ \"- Présent\" \"- Date :\" $File.LastWriteTime
}
}

#ou
forEach( $DumpFile in $dump1,$dump2,$dump3)
{
if ((test-path \"D:\\$DumpFile\"«») -eq $false)
{ Write-Host $dumpFile \"Absent\" }
else {
$File=Get-ChildItem \"D:\\$DumpFile\"
Write-Host $dumpFile \"- Présent\" \"- Date :\" $File.LastWriteTime
}
}

#Petite amélioration

forEach( $Nom in 'toto1.dmp','toto2.dmp','toto3.dmp')
{
$NomComplet=\"D:\\$Nom\"
if (Test-Path $NomComplet )
{
$File=Get-ChildItem $NomComplet
$Message=\"'$Nom' - Présent - Date : $($File.LastWriteTime)\"
}
else
{ $Message=\"'$Nom' absent\" }
Write-Host $Message
}
[/code:1]
Voir aussi l'aide en ligne .<br><br>Message édité par: Laurent Dardenne, à: 17/06/19 12:43

Tutoriels PowerShell

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

Plus d'informations
il y a 6 ans 9 mois #29028 par asceltis
Réponse de asceltis sur le sujet Re:Boucle
oh merci bien
j’étais parti avec un for et création de compteur... en résumé pas du tout dans la bonne direction :p

merci pour ton aide en tout cas

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

Plus d'informations
il y a 6 ans 9 mois #29029 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Boucle
asceltis écrit:

oh merci bien
j’étais parti avec un for et création de compteur... en résumé pas du tout dans la bonne direction :p

En interne c'est ce que le framework dotnet fait.
Les itérateurs fonctionnent comme une boucle, mais en simplifiant l'écriture.

Quant au pipeline ($dump1,$dump2,$dump3|ForEach-Object ... ) c'est un enchaînement de commandes effectué une ou plusieurs fois.

Tutoriels PowerShell

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

Plus d'informations
il y a 6 ans 9 mois #29030 par asceltis
Réponse de asceltis sur le sujet Re:Boucle
du coup si je veux m'envoyer un mail avec le résultat du script, il faut que je l'inclue dans :
[code:1]$smtpserver = \&quot;mail.domaine.local\&quot;
$from = \&quot;mon adresse mail@domaine.local\&quot;
$to = \&quot;adresses destinataires@domaine.local\&quot;
$subject = \&quot;Fichiers Dumps\&quot;
$body = \&quot;
&lt;html&gt;
&lt;head&gt;&lt;head&gt;
&lt;body&gt;
&lt;p&gt; Bonjour,&lt;br/&gt;
Etat des fichiers dumps à surveiller : &lt;br /&gt;
forEach( $Nom in 'toto1.dmp','toto2.dmp','toto3.dmp')
{
$NomComplet=\&quot;D:\\$Nom\&quot;
if (Test-Path $NomComplet )
{
$File=Get-ChildItem $NomComplet
$Message=\&quot;'$Nom' - Présent - Date : $($File.LastWriteTime)\&quot;
}
else
{ $Message=\&quot;'$Nom' absent\&quot; }
Write-Host $Message
}
forEach( $Nom in 'tata1.dmp','tata2.dmp','tata3.dmp')
{
$NomComplet=\&quot;\\server\$Nom\&quot;
if (Test-Path $NomComplet )
{
$File=Get-ChildItem $NomComplet
$Message=\&quot;'$Nom' - Présent - Date : $($File.LastWriteTime)\&quot;
}
else
{ $Message=\&quot;'$Nom' absent\&quot; }
Write-Host $Message
}
&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;

send-mailmessage -smtpserver $smtpserver -from $from -to $to -sudject $subject -body $body -bodyashtml -priority high
[/code:1]
est-ce correct ? ou alors faut-il concaténer le script (car je fait plusieurs recherche à plusieurs endroit du réseau ) dans une variable globale et juste appeler la variable dans le body du mail ?

encore merci pour le coup de main.

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

Plus d'informations
il y a 6 ans 9 mois #29031 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Boucle
asceltis écrit:

est-ce correct ?

Si ça fonctionne pourquoi pas :ohmy:
Mais, pour la maintenance, de dupliquer le code est à éviter.
Crée une fonction de recherche de fichier qui attend en paramètre une liste de fichier.
asceltis écrit:

juste appeler la variable dans le body du mail ?

Si c'est du texte formaté on peut procéder comme cela.

Mais ici, après la maintenance la conception, il faut éviter de mélanger les traitements de génération de données avec ceux de présentation ( affichage de données formatées).

Si demain tu souhaites envoyer un pdf au lieu d'un message HTML tu seras obligé de tout modifier. Certes tu peux me répondre 'y a 3 lignes, ça va pas me faire mal aux mains'. On peut aussi procéder comme cela...

En gros tu devrais avoir ceci :
[code:1]$Files= @(
Get-Data ListeFichier1
Get-Data ListeFichier2
)
$Message=New-message $Files
Send-Mail $Message[/code:1]

Tutoriels PowerShell

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

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