【问题标题】:SchTasks.exe to create a task folderSchTasks.exe 创建任务文件夹
【发布时间】:2012-04-05 10:29:24
【问题描述】:

是否有在 Windows 2008 中创建计划任务文件夹的命令?我正在尝试使用 SchTasks.exe 创建任务,并希望将这些任务放在任务文件夹下。本质上,在任务计划程序中,添加一个新文件夹并在该文件夹下添加多个任务。在 UI 中有一个创建文件夹的选项,但不确定命令参考

提前致谢

【问题讨论】:

  • 几次试验,问题解决了;关键是在名称中使用“\”。示例 schtask.exe 命令行,schtasks /create /xml "MyTask.xml" /tn "My Task Folder\My New Task"。这将创建一个文件夹“我的任务文件夹”并创建一个新任务“我的新任务”

标签: windows-server-2008 scheduled-tasks


【解决方案1】:

似乎没有任何方法可以通过SchTasks.exe 执行此操作。如果您在命令提示符处运行SchTasks.exe /Create /?,它会显示可用选项。据我所知,为任务创建文件夹不会显示为其中之一。

您也许可以通过ITaskScheduler 接口执行此操作。请参阅this question 了解差异的讨论,以及封装接口的库的链接。 (我没有看过该库,也不了解它;它只是根据对链接问题的接受答案显示为解决方案。)

【讨论】:

  • 谢谢,想通了!参考我的回答
【解决方案2】:

几次尝试就解决了问题;关键是在任务名称中使用 "\"。示例 schtask.exe 命令行,

schtasks /create /xml "MyTask.xml" /tn "My Task Folder\My New Task"

创建一个新的任务文件夹我的任务文件夹,并在新文件夹下创建一个新的任务我的新任务

如果需要在现有文件夹下创建任务,请尝试

schtasks /create /xml "MyTask.xml" /tn "Existing Task Folder\My New Task"

在现有任务文件夹现有任务文件夹

下创建一个新任务我的新任务

【讨论】:

  • 有关信息,在 Windows Server 2012 R2 上,此解决方案不起作用,将返回以下错误。 ERROR: The creation of the scheduled task failed. Reason: The Task Name may not contain the characters: < > : / \ |
  • @VCD:我刚刚在 WS 2012 R2 上对其进行了测试,它可以在文件夹下创建任务。似乎 MS 纠正了这种行为。
  • 我在 Server 2012 R2 上,我收到了@VCD 指出的错误。我在路径名周围加了双引号。
【解决方案3】:

这是一个旧线程,但我在其他地方找不到答案,所以我编写了一个小 powershell 脚本,它将任务复制到一个新文件夹并在需要时重写 UserId。 不要忘记手动删除旧任务。

Get-ScheduledTask | ? {$_.Taskpath -ieq "\FROM"} | % {
    $oTask = $_
    [XML]$TaskXML = Export-ScheduledTask -TaskName $oTask.TaskName

    #$TaskXML.GetElementsByTagName("UserId")[0].InnerText="SYSTEM"

    Register-ScheduledTask -TaskName $oTask.TaskName -TaskPath "\TO" -Xml $TaskXML.InnerXML
}

【讨论】:

    【解决方案4】:

    一个名叫 Régis Lainé 的家伙在 TechNet Gallery 上写了一个杀手脚本。我只是把它放在这里,以防网站被删除。

    Function Move-ScheduledTask {
        $SelectedItems = Get-ScheduledTask | Sort-Object -Property TaskName | Select-Object -Property TaskName, TaskPath, State | Out-GridView -Title "Select Tasks To Move" -OutputMode Multiple
        if ($SelectedItems -ne $null)
        {
            $TargetFolder = Get-ChildItem -Path "C:\Windows\System32\tasks" -Force -Recurse -ErrorAction SilentlyContinue | Select-Object -Property Name -Unique | Out-GridView -Title "Select Target Folder" -OutputMode Single;
            if ($TargetFolder -ne $null)
            {
                foreach ($item in $SelectedItems)
                {
                    try
                    {
                        Write-Host ("About to Move " + $item.TaskName + " : ") -NoNewline;
                        $SelectedScheduledTask = Get-ScheduledTask -TaskName $item.TaskName -TaskPath $item.TaskPath ;
                        Register-ScheduledTask -Xml ($SelectedScheduledTask | Export-ScheduledTask) -TaskName $SelectedScheduledTask.TaskName -TaskPath $TargetFolder.Name -ErrorAction Stop | Out-Null;
                        $SelectedScheduledTask | Unregister-ScheduledTask -Confirm:$false;
                        Write-Host ("Success") -ForegroundColor Green;
                    }
                    catch
                    {
                        Write-Host ("Error when processing : " + $item.TaskName) -ForegroundColor red;
                        write-Host ("`t" + $_.Exception.Message) -ForegroundColor Red; 
                        break;
                    }
                } 
            }
        }
    }
    
    
    Clear-Host;
    Move-ScheduledTask; 
    

    https://gallery.technet.microsoft.com/Dplacer-des-tches-planifies-1eabc70d/view/Discussions#content

    用法:将代码 sn-p 保存到一个名为 Move.ps1 的文件中,然后执行它。它会在提示中询问您希望移动哪些任务,您甚至可以按状态/名称等对其进行过滤。然后只需单击确定并等待魔法发生!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多