Comando Move-Item apenas parcialmente bem sucedido

3

Estou executando um script simples para arquivar logs do SMDR usando o Agendador de Tarefas do Windows Server 2008 R2. A última linha do script é a seguinte -

dir c:\smdr -Filter *.txt | where-object {$_.basename -eq 'SMDR_Log'} | move-item -destination "c:\smdr\ARCHIVED\SMDR_log_$yesterdayString.txt"

O último cmdlet no pipeline está renomeando o arquivo adequadamente (inserindo a data no nome do arquivo), mas não o move para a pasta ARCHIVED . Se eu executar este comando fora do Agendador de Tarefas, tudo funciona muito bem. As permissões estão bem na pasta de destino.

Posso pensar em várias maneiras de contornar isso, mas gostaria muito de explicar por que o arquivo foi renomeado, mas permanece no diretório atual.

XML da tarefa agendada exportada

<?xml version="1.0" encoding="UTF-16"?>
-<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.3">
-<RegistrationInfo>
<Date>2014-07-14T09:34:56.2252628</Date>
<Author>DOMAIN\taskadmin</Author>
<Description>Aggregates the individual daily call logs into one master log (.csv format)</Description>
</RegistrationInfo>
-<Triggers>
-<CalendarTrigger>
<StartBoundary>2014-07-15T00:00:01</StartBoundary>
<Enabled>true</Enabled>
-<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
-<Principals>
-<Principal id="Author">
<UserId>DOMAIN\taskadmin</UserId>
<LogonType>S4U</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
-<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
-<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
-<Actions Context="Author">
-<Exec>
<Command>powershell.exe</Command>
<Arguments>-File "C:\scripts\powershell\AvayaCallLogMaintenance\Combine-SMDRLogs.ps1"</Arguments>
</Exec>
</Actions>
</Task>

UPDATE: atualizei o PowerShell de 2.0 para 4.0 e parece estar funcionando nos meus testes. Eu vou deixar isso acontecer da noite para o dia e se isso acabar resolvendo, vou escrever como resposta.

UPDATE 2: o PowerShell 4.0 não resolveu isso. Eu agora dividi o comando move-item em comandos rename-item e move-item separados. Vou deixar isso acontecer esta noite e ver o que acontece.

    
por pk. 18.07.2014 / 18:22

1 resposta

0

Acabei com uma solução simples. Eu nunca descobri por que o comando inicial não estava funcionando.

Solução alternativa -

rename-item -path "c:\smdr\smdr_log.txt" -newname "SMDR_log_$yesterdayString.txt"
move-item -Path "c:\smdr\SMDR_log_$yesterdayString.txt" -Destination "C:\smdr\ARCHIVED"
    
por 23.07.2014 / 15:25

Tags