技術存檔
技術存檔
Windows 工作排程器 匯出所有排程
以 CSV 格式:
schtasks /query /fo CSV /v > AP6_tasks.csv
YMT AP03 匯出方式
$svc = New-Object -ComObject "Schedule.Service"
$svc.Connect()
# State 代碼對照(COM 回傳的是數字)
$stateMap = @{ 0='Unknown'; 1='Disabled'; 2='Queued'; 3='Ready'; 4='Running' }
# 遞迴收集每個資料夾的工作
function Get-TaskList($folder) {
$folder.GetTasks(1) | ForEach-Object { # 1 = 連隱藏工作也抓
$t = $_
$def = $t.Definition
# 取第一個「執行程式」動作的命令(Type 0 = Exec)
$act = $def.Actions | Where-Object { $_.Type -eq 0 } | Select-Object -First 1
$cmd = if ($act) { ("$($act.Path) $($act.Arguments)").Trim() } else { '' }
$next = try { $t.NextRunTime } catch { $null }
[PSCustomObject]@{
Path = $t.Path
Name = $t.Name
State = $stateMap[[int]$t.State]
Enabled = $t.Enabled
NextRun = $next
LastRun = $t.LastRunTime
LastResult = ('0x{0:X8}' -f [int]$t.LastTaskResult)
Author = $def.RegistrationInfo.Author
RunAsUser = $def.Principal.UserId
Command = $cmd
}
}
foreach ($sub in $folder.GetFolders(0)) { Get-TaskList $sub } # 遞迴子資料夾
}
# 確保輸出資料夾存在
$out = "C:\Users\ymtauser\Downloads\Empty\AP3_tasks.csv"
if (-not (Test-Path "C:\Temp")) { New-Item -ItemType Directory "C:\Temp" | Out-Null }
# 收集 → 排序 → 匯出(UTF-8 含 BOM,Excel 開中文不亂碼)
$tasks = Get-TaskList $svc.GetFolder("\")
$tasks | Sort-Object Path, Name | Export-Csv -Path $out -NoTypeInformation -Encoding UTF8
Write-Host "共匯出 $($tasks.Count) 筆工作到 $out"