PowerShell Export-ScheduledTask导出部分任务生成0KB空文件问题
解决PowerShell导出计划任务出现空XML文件的问题
问题场景
使用以下PowerShell脚本导出名称以PROJECT开头的计划任务时,其中一个任务导出为0KB的空XML文件,其余任务导出正常:
$SchTasks = Get-ScheduledTask -TaskName "PROJECT*" foreach ( $SchTask in $SchTasks ) { $SchTask | Export-ScheduledTask | Out-File "C:\Temp\Tasks\$($SchTask.Taskname).xml" }
- 脚本无报错,但目标任务导出结果为空
- 手动从任务计划程序导出该任务可正常生成完整XML
- 对比发现:脚本导出的XML头部为
Task version="1.3",手动导出为Task version="1.2" - 重新创建任务后问题依旧
可能原因
Export-ScheduledTask cmdlet在处理部分版本1.3的计划任务时,可能存在静默序列化异常,导致输出为空字符串,最终被Out-File写入空文件。而任务计划程序的原生导出逻辑与PowerShell cmdlet不同,能正确处理这类任务。
解决方案
方案1:显式捕获导出内容并验证后写入
先捕获Export-ScheduledTask的输出,确认内容非空后再写入文件,同时指定编码与手动导出保持一致:
$SchTasks = Get-ScheduledTask -TaskName "PROJECT*" $outputDir = "C:\Temp\Tasks" # 确保输出目录存在 if (-not (Test-Path $outputDir)) { New-Item -ItemType Directory -Path $outputDir | Out-Null } foreach ( $SchTask in $SchTasks ) { $taskXml = Export-ScheduledTask -InputObject $SchTask if ($taskXml) { $taskXml | Out-File "$outputDir\$($SchTask.Taskname).xml" -Encoding UTF8 } else { Write-Warning "任务 [$($SchTask.TaskName)] 导出内容为空,已跳过写入" } }
方案2:直接指定任务名称和路径导出
避免通过管道传递Get-ScheduledTask的结果,直接用任务名称和路径调用Export-ScheduledTask:
$SchTasks = Get-ScheduledTask -TaskName "PROJECT*" foreach ( $SchTask in $SchTasks ) { Export-ScheduledTask -TaskName $SchTask.TaskName -TaskPath $SchTask.TaskPath | Out-File "C:\Temp\Tasks\$($SchTask.Taskname).xml" -Encoding UTF8 }
任务版本1.2与1.3的差异
- 版本1.2:适配Windows 7/Server 2008 R2及更早系统,仅支持基础计划任务功能(如简单触发器、基本操作)
- 版本1.3:适配Windows 8/Server 2012及以后系统,新增了高级特性:
- 更多触发器类型(如事件触发器的精细过滤)
- 更丰富的执行条件(如网络状态检测)
- 对PowerShell 3.0+脚本执行的优化支持
内容的提问来源于stack exchange,提问作者James Brown
相关产品推荐
相关产品推荐

