Move-Item命令仅部分成功

我正在运行一个简单的脚本来使用Windows Server 2008 R2的任务计划程序来存档SMDR日志。 脚本的最后一行如下所示 –

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

pipe道中的最后一个cmdlet正确地重命名该文件(将date插入到文件名中),但不会将其移至ARCHIVED文件夹。 如果我在Task Scheduler之外运行这个命令,一切都很好。 目标文件夹的权限没问题。

我可以想出很多方法来解决这个问题,但我真的很想解释为什么文件被重命名,但仍然保留在当前目录中。

导出的预定任务XML

 <?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> 

更新:我将PowerShell从2.0升级到4.0,它似乎在我的testing工作。 我会让它在一夜之间运行,如果这最终解决了,我会把它写成答案。

更新2:PowerShell 4.0没有解决它。 我现在把move-item命令分解成单独的rename-itemmove-item命令。 我会让它今晚运行,看看会发生什么。

我结束了一个简单的解决方法。 我从来没有弄清楚为什么最初的命令不工作。

解决方法 –

 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"