Remplacer automatiquement le fichier lorsqu'une modification est détectée

1

Imaginez qu'il y a un fichier A:\Example\file.txt

Si une modification est détectée dans ce fichier, il est automatiquement remplacé par le fichier B:\example\file.txt. Si aucune boîte de dialogue de remplacement de fichier n'apparaît ni aucune invite UAC n'apparaissant à chaque fois, tout se passe en arrière-plan. Si aucun changement n'est détecté, rien n'est fait, le script continue de rechercher les modifications en arrière-plan, tout en consommant très peu de ressources système.

Je pourrais faire:

Copy-Item "A:\Example\file.txt" "B:\Example\file.txt" -Force

Mais cela ne se produit pas régulièrement ni en arrière-plan, et je ne sais pas s'il peut ignorer automatiquement ou non les invites du contrôle de compte d'utilisateur ou les boîtes de dialogue de remplacement de fichiers.

Tampon Over Read
la source
1
Veuillez noter que superutilisateur.com n'est pas un service gratuit de rédaction de scripts / codes. Si vous nous dites ce que vous avez essayé jusqu'à présent (inclure les scripts / code que vous utilisez déjà) et où vous êtes bloqué, nous pouvons essayer de vous aider avec des problèmes spécifiques. Vous devriez également lire Comment poser une bonne question? .
DavidPostill
1
Un peu mieux :)
DavidPostill
@MagicallyDelicous Remplacer chaque minute ne détecte pas les modifications de fichiers, n'est-ce pas? Il remplace simplement le fichier toutes les minutes, qu'il ait été modifié ou non, ce qui n'est pas ce que je préférerais.
mémoire tampon a été
@MagicallyDelicous Je veux qu'il soit remplacé si le fichier change en général. Quelque chose comme une solution basée sur le hachage pourrait fonctionner, mais je ne suis pas sûr si la vérification des hachages à chaque fois est intensive sur le système ou non. Idéalement, je souhaiterais que le script s'exécute en arrière-plan avec un minimum de ressources.
Tampon Over Read
1
Il est intéressant de noter que la méthode la plus simple consiste à utiliser un observateur de système de fichiers. Ainsi, vous êtes rappelé que le fichier a changé et que vous agissez (par exemple, copier le nouveau fichier), bien entendu, cela déclenche le même rappel lorsque vous écrasez le fichier que vous surveillez, de sorte que vous vous retrouvez dans une boucle infinie. pastebin.com/NmHuigtL
HelpingHand

Réponses:

1

Vous allez en principe avoir besoin d'une tâche planifiée qui s'exécute à intervalles rapprochés - toutes les 5 minutes par exemple - pour détecter un changement. Une idée qui me vient à l’esprit est que vous pouvez hacher le fichier, stocker la valeur, puis redéfinir le fichier avec votre tâche planifiée et comparer le hachage à la valeur stockée. Vous semblez connaître Powershell. Verion 4.0 et versions ultérieures ont une cmdlet Get-FileHash que vous pouvez utiliser. À partir de là, demandez à votre script de copier le fichier si les hachages sont différents.

En réponse au commentaire, voici un exemple de code. StoredHash.txt est un fichier texte contenant le hachage du fichier en question.

$A = Get-Content "StoredHash.txt"
$B = Get-FileHash  -Algorithm MD5 -Path "A:\Example\file.txt"
If (-Not $A = $B)   
  {
  Copy-Item "A:\Example\file.txt" -Destination "B:\Example\file.txt"
  $B | Out-File "StoredHash.txt"   
  }

La dernière ligne stocke le nouveau hachage afin que vous puissiez rechercher un changement ultérieur. Je n'ai pas testé ce code, il peut donc contenir des erreurs. Mais cela devrait être suffisant pour vous aider à démarrer.

Charles Burge
la source