Substitui automaticamente o arquivo quando uma alteração é detectada

1

Imagine que existe um arquivo A:\Example\file.txt

Se qualquer alteração for detectada nesse arquivo, ela será automaticamente substituída pelo arquivo B:\example\file.txt e, sem que apareça uma caixa de diálogo de substituição de arquivo, nem um prompt do UAC aparecendo todas as vezes, tudo acontecerá em segundo plano. Se nenhuma alteração for detectada, nada será feito, o script continuará a verificar se há alterações no plano de fundo, embora espere consumir muito poucos recursos do sistema.

Eu poderia fazer:

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

Mas isso não é recorrente ou está sendo executado em segundo plano o tempo todo, e não tenho certeza se ele pode ignorar prompts do UAC ou caixas de diálogo de substituição de arquivos automaticamente ou não.

    
por Buffer Over Read 05.03.2017 / 21:33

1 resposta

1

Você basicamente precisará de uma tarefa agendada que seja executada em intervalos curtos - digamos, a cada 5 minutos - para detectar uma alteração. Uma ideia que vem à mente é que você poderia fazer o hash do arquivo, armazenar o valor e, em seguida, fazer com que a tarefa agendada varresse o arquivo novamente e comparar o hash com o valor armazenado. Você parece estar familiarizado com o Powershell. O Verion 4.0 e superior tem um cmdlet Get-FileHash que você poderia usar. A partir daí, o seu script copie o arquivo se os hashes forem diferentes.

Em resposta ao comentário, aqui está um código de exemplo. StoredHash.txt é um arquivo de texto que contém o hash do arquivo em questão.

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

A última linha armazena o hash novo para que você possa procurar por uma alteração subsequente. Eu não testei esse código, então ele pode conter erros. Mas deve ser o suficiente para você começar.

    
por 05.03.2017 / 22:01