Можно ли из внутри пакетного файла получить имя задачи планировщика задач, выполняющей пакетный файл? - PullRequest
0 голосов
/ 14 июня 2019

Если в среде Windows 10 у меня нет доступа к планировщику задач, выполняющему мой bat-файл, могу ли я (изнутри пакетного файла) знать имя задачи, запустившей пакетный файл? Есть ли переменная, которая устанавливается с именем задачи планировщика задач, которую я могу использовать?

Очевидным решением было бы добавить параметр имени задачи при вызове действия в планировщике задач, но что если у меня нет доступа к планировщику задач?

1 Ответ

1 голос
/ 14 июня 2019

Я надеюсь, что это решение работает для вас.

Ниже вы можете найти:

.BAT-файл и .VBS, который содержит функцию.

как для .BAT:

@ECHO OFF
SET DT=%DATE% %TIME%
SET DATETIME=%DT:~0,19%
FOR /F "usebackq tokens=*" %%r in (`CSCRIPT "C:\<your_folder>\current_task_name.vbs" "%~dpnx0" "%DATETIME%"`) DO SET current_task_name=%%r
ECHO script was executed by: %current_task_name%
PAUSE

как для VBS с именем: current_task_name.vbs

getMyTask WScript.Arguments.Item(0), WScript.Arguments.Item(1)

Function getMyTask(Cmd, StartDateTime)
	' ----------------------------------------------------------------------
	' Script to list all Scheduled tasks and their available properties
	'   Written for TaskSchedule 2.0
	' ----------------------------------------------------------------------
	Dim objTaskService, objTaskFolder, colTasks
	Dim objTask

	' Create the TaskobjTaskService object and connect
	Set objTaskService = CreateObject("Schedule.Service")
	Call objTaskService.Connect

	' Get the task folder that contains the tasks.
	Set objTaskFolder = objTaskService.GetFolder("\")
	 
	' Get all of the tasks (Enumeration of 0 Shows all including Hidden.  1 will not show hidden)
	Set colTasks = objTaskFolder.GetTasks(0)

	If colTasks.Count = 0 Then
		wscript.echo "No registered tasks."
	Else
		For Each objTask In colTasks
			With objTask
				'check if the time of execution is in the same range of the current task (~ 2 secs. after)
				If DateDiff("s", .LastRunTime, StartDateTime) <= 2 Then 
					Set objTaskDefinition = .Definition
					With objTaskDefinition
						Set colActions = objTaskDefinition.Actions
						For Each objTaskAction In colActions
							With objTaskAction
								Select Case .Type
									Case 0	'= Execute / Command Line Operation
										'If .Path of TaskAction object is equal to the batch file name provided
										'it returns its task name back
										If .Path = Cmd Then
											wscript.echo objTask.Name
											wscript.quit
										End If
								End Select
							End With
						Next
					End With
				End If
			End With
		Next
	End If
			
End Function

С уважением, jtandrea

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...