我正在运行一个简单的脚本,使用 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"
管道中的最后一个 cmdlet 正在正确重命名文件(将日期插入文件名中),但不会将其移动到已归档文件夹。如果我在任务计划程序之外运行此命令,则一切正常。目标文件夹的权限正常。
我可以想到很多解决这个问题的方法,但我真的很想知道为什么文件被重命名但仍保留在当前目录中。
导出的计划任务 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,在我的测试中它似乎可以正常工作。我会让它运行一整夜,如果最终解决了问题,我会将其写成答案。
更新 2:PowerShell 4.0 无法解决该问题。我现在已将move-item
命令分解为单独的rename-item
命令move-item
。今晚我会让它运行,看看会发生什么。
答案1
我最终找到了一个简单的解决方法。我始终不明白为什么初始命令不起作用。
解决方法——
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"