Автоматично замінити файл, коли виявлено зміну


1

Уявіть, що є файл A:\Example\file.txt

Якщо в цьому файлі буде виявлена ​​будь-яка зміна, вона автоматично замінюється на файл B:\example\file.txt, і без діалогового вікна заміни файлу, а також підказки UAC, що з'являються щоразу, все просто відбувається у фоновому режимі. Якщо ніяких змін не виявлено, нічого не робиться, сценарій продовжує перевіряти зміни у фоновому режимі, сподіваючись, споживаючи дуже мало системних ресурсів.

Я міг би зробити:

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

Але це не повторюється і не працює у фоновому режимі весь час, і я не впевнений, чи може він пропускати підказки UAC або діалоги заміни файлів автоматично чи ні.


1
Зверніть увагу, що superuser.com - це не безкоштовна послуга написання сценарію / коду. Якщо ви скажете нам, що ви намагалися до цього часу (включіть сценарії / код, який ви вже використовуєте) і де ви застрягли, то ми можемо спробувати допомогти у вирішенні конкретних проблем. Ви також повинні прочитати Як мені поставити гарне запитання? .
DavidPostill

1
Трохи краще :)
DavidPostill

@MagicallyDelicous Заміна кожної хвилини не виявляє змін у файлі, чи не так? Він просто замінює файл щохвилини, незалежно від того, змінився файл чи ні, що я б не віддав перевагу.
Буфер над

@MagicallyDelicous Я хочу, щоб його замінили, якщо файл взагалі змінився. Щось на кшталт рішення на основі хешу може працювати, але я не впевнений, що перевірка хесів кожного разу інтенсивно працює в системі чи ні. В ідеалі я хотів би, щоб сценарій працював у фоновому режимі з мінімальними ресурсами.
Буфер над

1
Це цікаво, як правило, способом цього було б використовувати інструмент для перегляду файлової системи. Таким чином, вам передзвонили, що файл змінився, і ви вживатимете заходів, наприклад, скопіюйте новий файл, звичайно, це викликає той же зворотний виклик, що і ви перезаписуєте файл, який ви контролюєте, щоб ви опинилися в нескінченному циклі. pastebin.com/NmHuigtL
HelpingHand

Відповіді:


1

В основному вам знадобиться заплановане завдання, яке виконується через короткі проміжки часу - скажімо, кожні 5 хвилин - для того, щоб виявити зміни. Одна з думок, яка спадає на думку, полягає в тому, що ви можете хеш-файл, зберегти його значення, а потім знову запрограмувати хеш файлу, який планується, і порівняти хеш із збереженим значенням. Ви, здається, знайомі з Повершелом. У Verion 4.0 і вище є командлет Get-FileHash, який ви можете використовувати. Звідти скопіюйте свій сценарій, якщо хеші різні.

У відповідь на коментар, ось якийсь зразок коду. StoredHash.txt - це текстовий файл, який містить хеш відповідного файлу.

$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"   
  }

Останній рядок зберігає новий хеш, щоб ви могли шукати наступні зміни. Я не перевіряв цей код, тому він може містити помилки. Але цього має бути достатньо, щоб почати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.