Estou tentando criar um mecanismo (no meu caso Robocopy incluído no PowerShell) que fará o backup dos logs do IIS de todos os nossos servidores da Web em um compartilhamento CIFS central. Como seria de se esperar, tive problemas com a cópia do arquivo de log aberto no momento, pois o NTFS não costuma atualizar o LastWriteTime conforme o arquivo é gravado, a menos que todas as alças estejam fechadas.
No entanto, notei que, sempre que eu procurava no diretório com o Windows Explorer, não apenas a atualização Data de modificação, mas a próxima execução do Robocopy capturava o arquivo e o atualizava corretamente. Em uma tentativa de emular o comportamento do Windows Explorer, executei o seguinte código no PowerShell antes de invocar o trabalho do Robocopy:
$aryFileList = Get-ChildItem $job.SourcePath
ForEach ($file in $aryFileList) {(New-object System.IO.FileInfo $file).LastWriteTime | Out-Null}
Isso funcionou para alguns dos meus servidores IIS e para todos os meus outros métodos de registro (principalmente log4net). No entanto, em dois dos meus servidores IIS isso não teve efeito, apesar de serem o mesmo sistema operacional e versão do IIS que outros que funcionou perfeitamente.
Isso me leva de volta ao pensamento; o que exatamente o Windows Explorer faz quando você o usa para atualizar um diretório até o ponto em que ele atualiza as informações de Date Modified / LastWriteTime? Mais importante para os meus propósitos, existe alguma maneira que a mesma coisa possa ser invocada no PowerShell?
Tags powershell robocopy iis