Renomeia o arquivo na pasta sempre que ele é criado?

2

Eu preciso encontrar uma maneira de renomear automaticamente todos os arquivos que são criados dentro de um diretório específico em um servidor de arquivos do Windows 2008r2. Isso precisa ser feito mais ou menos instantaneamente, por isso não posso ter um trabalho agendado executado a cada 5 minutos ou mais.

Eu fiz algumas pesquisas e descobri que posso conseguir fazer isso agendando uma tarefa para acionar a criação de arquivos de sinalização de eventos WMI, mas eu realmente não sei como começar, então preciso de alguns ponteiros.

Para criar um script PS que localize o arquivo e renomeie, seria bastante fácil, mas eu realmente não sei como acionar o script no evento correto.

    
por Mikael Grönfelt 09.09.2011 / 09:59

3 respostas

5

Primeiro, ative a Auditoria de arquivos em Ferramentas administrativas - > Política de segurança local - > Políticas locais - > Política de Auditoria - > Auditar o acesso ao objeto.

Aqui, você deseja ativar os dois Failure & Success

Depoisdisso,cliquecomobotãodireitonapastaondeaspastasserãocriadaseváparaAvançadonasPropriedades.LávocêteráumaabaAuditing.Adicioneparatodososusuárioseverifiquetodasasopções(Sucesso)

Em seguida, crie uma pasta na pasta e abra o eventvwr . Aqui você verá uma entrada nos logs de auditoria para a criação da pasta. Clique com o botão direito e adicione uma ação.

Como tarefa, você poderia lançar PowerShell.exe e como argumento você poderia fornecer seu script:

.\MyScript.ps1 -eventRecordID $(eventRecordID) -eventChannel $(eventChannel)

(Você não precisa passar os argumentos se não estiver fazendo nada com eles)

    
por 09.09.2011 / 13:32
0

Eu nunca tentei, mas o PowerShell Pack inclui um FileSystemWatcher que pode acionar seu monitor de alerta. Consulte este tópico para obter um exemplo de uso.

Seu script de powershell obviamente precisa ser executado continuamente.

No entanto, um dos seus maiores problemas com o qualquer sistema de gatilhos é que você normalmente será notificado quando a criação do arquivo for iniciada e não quando tiver terminado. arquivo ainda pode estar em uso quando você tenta renomeá-lo. Para contornar isso, seu código de gatilho pode ter que verificar se a renomeação é bem-sucedida e continuar tentando de vez em quando até ocorrer.

Você também precisa ter cuidado com a forma como os arquivos são criados. Por exemplo, eu vi programas que, antes de mais nada, criam arquivos como filename.ext.temp e, quando concluídos, renomeam o arquivo para o nome próprio, ie filename.ext. Neste caso, você não quer realmente monitorar a criação do arquivo, mas sim a renomeação.

    
por 09.09.2011 / 14:07
0

Eu considerei um, mas gosto TiZon < melhor. Este foi o código que encontrei um tempo atrás, mas a necessidade para ele foi embora, então eu nunca o usei muito.

' VBScript source code

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & _
    strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("Select * From __InstanceCreationEvent Within 5 Where " _
    & "Targetinstance Isa 'CIM_DirectoryContainsFile' and " _
    & "TargetInstance.GroupComponent= " _
    & "'Win32_Directory.Name=""c:\\scripts""'")

Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop

De CodeProject .

    
por 10.09.2011 / 10:19