Résolu Créer un compteur dans mon script existant pour effacer deux fichiers log

Plus d'informations
il y a 1 mois 3 semaines - il y a 1 mois 3 semaines #33481 par Szuszkiewicz
Bonjour,
Dans mon script tous les jours à 11h00 je sauvegarde Google Drive dans OneDrive avec rclone sur un pc Windows 10 ensuite j'envoie un Email de confirmation avec des fichiers.log.
Je voudrai ajouter un compteur qui efface les deux fichiers.log après 5 exécution du script. Mais ça ne fonctionne pas comme je voudrai ?
# Initialisation du compteur
$counter = 0
$limit = 5

while ($counter -lt $limit) {
  $counter++

  if ($counter -eq $limit) {
    Clear-Content "C:\USB-PORTABLE\PortableApps\Rclone-Portable\Log\onedrive.log"
    Clear-Content "C:\USB-PORTABLE\PortableApps\Rclone-Portable\Log\kdrive0.log" 
  }
}

# Début du Script

Désolé, je débute avec PowerShell si quelqu'un pouvait m'aider je vous remercie d'avance Richard
Dernière édition: il y a 1 mois 3 semaines par Arnaud Petitjean.

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

Plus d'informations
il y a 1 mois 3 semaines #33483 par Arnaud Petitjean
Bonjour Richard,

Tu ne pourras effectivement pas faire fonctionner ton script ainsi car lorsque ton script (qui est probablement lancé par une tâche planifiée) se termine, la valeur de ton compteur est perdue. Ce qui est normal, puisque tu détruis ton étendue mémoire à chaque fin d'exécution de ton script.

Si tu veux que ça fonctionne, il faut stocker la valeur de ton compteur en dehors de la mémoire. Ca peut être sur disque, dans un fichier temporaire, ou mieux dans la base de registres.

Arnaud

MVP (Reconnect) 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 1 mois 3 semaines #33493 par Szuszkiewicz
Merci Arnaud,
Je peux le stoker dans le même répertoire que les log dans un fichier.txt pour faire simple ?
Tu aurais un exemple de code à me proposer stp ? Vu mon niveau, je ne sais pas par où commencer.
Passe une bonne soirée Richard

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

Plus d'informations
il y a 1 mois 3 semaines #33500 par Arnaud Petitjean
Bonjour Richard,

Au fait, ne t'excuse pas d'être débutant. Nous sommes tous passés par là un jour ! Et puis ce forum est là pour t'aider les débutants ;-)

Alors voici ce que je ferais :
# ici tu mets ton code pour faire ton backup
...
# Ensuite tu écris la valeur dans ton fichier
$ficCompteur = "$PSScriptRoot\compteur.txt"
If (Test-Path -Path $ficCompteur) {
   [int]$Cpt = Get-Content -Path $ficCompteur
   $Cpt = $Cpt + 1
   $Cpt | Out-File -FilePath $ficCompteur
}

Dans cet exemple, j'utilise $PSScriptRoot pour dire de créer le fichier dans le répertoire où se trouve le script. Ce sera sûrement à changer par rapport à ton besoin.
Ensuite avant d'aller lire dans le fichier, je vérifie qu'il existe. Je récupère son contenu (qui sera du String) en un nombre entier, puis je l'incrémente de 1 et je crée un nouveau fichier.

Voilà, il y a sûrement plus élégant à faire mais c'est ce que tu voulais ;-). Personnellement je pense que ce serait plus élégant en positionnant une clé de registres; mais ça pourra peut-être faire l'objet d'une v2 de ton script :-).

Ah, je précise que je n'ai pas testé que ça fonctionne, mais je pense que ça devrait...

Arnaud

MVP (Reconnect) 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 1 mois 3 semaines - il y a 1 mois 3 semaines #33504 par Szuszkiewicz
Merci Arnaud pour ta réponse,
Entre temps j'ai cherché la solution, grâce à ta remarque sur la mémoire du compteur après l'exécution du script. Ce qui m'a beaucoup aidé.
Merci pour ton script.
Voici celui que j'ai fait et qui fonctionne grâce à toi !
# Definir le chemin des fichiers de journal
$onedriveLogPath = "C:\USB-PORTABLE\PortableApps\Rclone-Portable\Log\onedrive.log"
$kdriveLogPath = "C:\USB-PORTABLE\PortableApps\Rclone-Portable\Log\kdrive0.log"

# Definir le chemin du fichier compteur
$counterFilePath = "C:\USB-PORTABLE\PortableApps\Rclone-Portable\Log\compteur.txt"

# Verifier si le fichier de compteur existe
if (Test-Path $counterFilePath) {
# Lire la valeur actuelle du compteur depuis le fichier
$counter = Get-Content $counterFilePath
$counter = [int]$counter
} else {
# Si le fichier de compteur n'existe pas, initialiser le compteur a zero
$counter = 0
}

# Incrementer le compteur
$counter++

# Verifier si le compteur a atteint 10 executions
if ($counter -eq 10) {
# Reinitialiser le compteur a zero
$counter = 0

# Effacer le contenu des fichiers de journal
Clear-Content $onedriveLogPath
Clear-Content $kdriveLogPath
}

# Enregistrer la nouvelle valeur du compteur dans le fichier
$counter | Set-Content $counterFilePath

# Debut du Script
...

Je voulais savoir quel éditeur tu utilises pour créer tes scripts Vs code ? Pour avoir l'aide en ligne sur les différentes commandes.

J'ai bien compris que je prenais le train en marche, avec PowerShell. Bien sûr il faut commencer par le début comme avec tout les langages !
Sauf que moi je ne suis pas tout jeune je suis de 51 et j'ai commencé avec Windows 2 avec les disquettes 5" 1/4 et les écrans noir et blanc. Autant dire qu'il y a un baille !
Pour moi les carottes sont cuites ! Mais je reconnais que pour un trentenaire il y a un fort potentiel avec PowerShell, office 365 et Microsoft Azure. Même que Amazon le géant du web a investi dans Office 365 des M$ pour pouvoir l'utiliser. C'est un signe ! 
Moi j'ai un besoin ponctuel, un dépannage pour un besoin précis. Ce remettre dans la doc ou des cours pour réaliser un bout code ça me parrait compliqué à mon âge 
Tout est venu il y a un an quand j'ai décidé de remplacer mon vieux synology par un NAS DYS perso sous Unraid. Il a fallu que j'apprenne à utiliser Linux, Bash etc. Du coup je suis dans une logique d'apprentissage permanente. Je passe de l'un à l'autre je saute du coq à l'âne, je lie beaucoup de doc et parfois je me perds. Donc j'ai besoin d'aide en permanence grâce aux forums, Discord et des personnes come toi qui m'aide beaucoup 

Un grand merci à toi pour ton aide 
J'ai une autre question, du coup, je vais ouvrir un autre sujet. 

Passes une bonne journée
@+
Richard[/code][/code]
Dernière édition: il y a 1 mois 3 semaines par Arnaud Petitjean.

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

Plus d'informations
il y a 1 mois 3 semaines #33506 par Szuszkiewicz
J'ai parlé trop vite ! Désolé 
J'ai une erreur dans mon Script :
InvalidArgument: C:\USB-PORTABLE\PortableApps\Rclone-Portable\backup-googledrive-onedrive-kdrive0-V4.0.ps1:30
Line |
  30 |      $counter = [int]$counter
     |      ~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Int32".
InvalidOperation: C:\USB-PORTABLE\PortableApps\Rclone-Portable\backup-googledrive-onedrive-kdrive0-V4.0.ps1:37
Line |
  37 |  $counter++
     |  ~~~~~~~~~~
     | The '++' operator works only on numbers. The operand is a 'System.Object[]'.

Les paramètres du compteur ne sont pas bon !
C'est presque bon mais, ce n'est pas bon 
Pourtant, je l'ai testé plusieurs fois et je n'avais pas d'erreur ?

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

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