Powershell 生成批处理文件以备份计划任务的启用/禁用状态
从批处理文件中,我尝试:Powershell 生成批处理文件以备份计划任务的启用/禁用状态,powershell,batch-file,cmd,scheduled-tasks,backup,Powershell,Batch File,Cmd,Scheduled Tasks,Backup,从批处理文件中,我尝试: 捕获Windows 10 x64中所有计划任务的任务名称和启用/禁用状态 将这些文件导出到第二个批处理文件,每个任务的TASKNAME和SCHEDULED_TASK_STATE由以下命令填充: schtasks/Change/TN“\TASKNAME”/SCHEDULED\u TASK\u STATE 其想法是,第二个批处理文件用作所有现有任务的启用/禁用状态的一键备份/恢复。这样,通过GUI工具(例如,任务调度器、自动运行、taskschedulerview-x64等
SCHTASKS /Query /FO LIST /v
。。。将检索所有任务的列表以及我感兴趣的两个值--“任务名称”“和“计划任务状态””
根据从其他堆垛机收集到的信息,下面是我使用临时文件方法所得到的信息,但这只完成了一半,我有点不知所措:)
如果源批处理文件:
非常感谢您的帮助。因为您只需要任务名和状态,所以不需要
/v
(详细)schtasks
随后将输出任务名称、下一次运行时间和状态。获取
csv
格式,而不是list
,这样每个任务只在一行上(更容易解析)。使用
find
排除标题行。使用
for
循环获取所需的令牌(1=taskname,3=status)并将其设置为变量
@echo off
setlocal enabledelayedexpansion
set n=0
for /f "tokens=1,3 delims=," %%a in ('schtasks /query /fo csv^|find "\"') do (
set /a n+=1
set name[!n!]=%%~na
set state[!n!]=%%~b
)
echo ----- %n% tasks found -----
rem set name
rem set state
set /a num=%random% %% %n% +1
echo example: !name[%num%]! has status of !state[%num%]!
因为变量(
n
)在一个代码块中被更改和使用。关于@Stephan下面的答案
评论
任务“状态”值(由Stephan使用)与“计划任务状态”略有不同。为了在我试图创建的备份批处理文件中导出命令“schtasks/Change/TN”,我需要在行的末尾显示“计划任务状态”
任务状态仅对详细结果可用;因此,我将Stephan代码的第4行更改为:
:: Added /v (verbose); changed tokens to "2" (for task name in CSV) and "12" (for task state in CSV)
for /f "tokens=2,12 delims=," %%a in ('schtasks /query /fo csv /v^|find "\"') do (
待定
我仍然不确定如何附加Stephan修改过的代码,以便:
我意识到了另一个问题:获取任务状态的命令使用语言“Enabled”或“Disabled”(末尾是“d”);但是设置任务状态的命令需要语言“ENABLE”或“DISABLE”(末尾都不带“d”)。因此,绘图变厚了:在输出到目标批处理文件时,如何删除不必要的值“d”结尾 谢谢Stephan的努力和解释。我将在回答中提供更多细节。更糟糕的是:1)
schtasks
使用当地语言。在我的系统中是“Aktiviert”和“Deaktiviert”。2) 某些任务名称包含逗号和引号,因此tokens=12
不可靠!。您应该在问题中添加powershell
标记。我自己的PowerShell知识水平很低,但我很确定,它可以更好地处理这个问题。再次感谢您尝试Stephan。我将研究使用Powershell,或者可能使用我试图避免的临时文件方法。该过程将是:1)查询TaskName并将其全部保存到testa;2) 查询任务状态并保存到文件B;3) 在文本文件B中,用“启用”查找并替换“启用”,用“禁用”查找并替换“禁用”;4)将文件A和文件B中的值连接到命令“schtasks/Change/TN”File-A_值“/File-B_值”中,并保存到文件-C.bat。然后在文件中,我将得到我在文件-C.1/2中想要的东西:请记住,两个查询不会同时运行。如果在该时间段内添加或删除任务(任务计划程序设置“如果任务未计划再次运行,请将其删除”),则整个结果列表将出错。(不太可能,但实践不好)
:: Added /v (verbose); changed tokens to "2" (for task name in CSV) and "12" (for task state in CSV)
for /f "tokens=2,12 delims=," %%a in ('schtasks /query /fo csv /v^|find "\"') do (
schtasks /Change /TN "GoogleUpdateTaskMachineUA" /DISABLE
schtasks /Change /TN "GoogleUpdateTaskMachineCore" /DISABLE
schtasks /Change /TN "DropboxUpdateTaskMachineCore" /DISABLE
schtasks /Change /TN "DropboxUpdateTaskMachineUA" /DISABLE
schtasks /Change /TN "\Microsoft\Windows\Application Experience\ProgramDataUpdater" /DISABLE