Skip to content

Консольные задачи в SCSM

Консольные задачи в SCSM published on Комментариев к записи Консольные задачи в SCSM нет

Так же, как и в OpsMgr, SCSM поддерживает консольные задачи – набор возможностей, доступных для каждого элемента в системе. Консольные задачи отображаются в панели Actions (Задачи) в консоле SCSM:
image
Мы можем создавать собственные консольные задачи, но в отличии от того же OpsMgr, в SCSM нам доступен только один вид задач – задачи командной строки. Такие задачи отлично подходят для запуска различных консолей и прочего, но не совсем подходят для работы с объектами самого SCSM.

“Изнутри” консольные команды радикально отличаются от того, что мы видели в OpsMgr. Все консольные задачи обрабытываются с помощью одной из двух .NET-сборок, так называемых обработчиков (handlers):

  1. CommandLineHandler – отвечает за обработку задач командной строки
  2. ConsoleTaskHandler – отвечает за обработку любых задач из сборок .NET

Описание задач в пакетах управления

Общие параметры

Все консольные задачи имеют следующее определение:

<ConsoleTask ID="NewID" Accessibility="Public" Enabled="true" Target="Class" RequireOutput="true">
  <Assembly>EnterpriseManagement!SdkDataAccessAssembly</Assembly>
  <Handler>HandlerAssemblyFullName</Handler>
  <Parameters>
     .....
  </Parameters>
</ConsoleTask>

Атрибуты консольной задачи:

  • ID – внутреннее имя задачи
  • Accessibility – уровень доступности, для задач обычно public, т.е. доступен для всех пакетов управления
  • Enabled – включена или отключена задача
  • Target – тип объекта, для которого будет доступна эта задача
  • RequireOutput – требуется ли вывод на экран для этой задачи. Обычно включается для программ командной строки (ping, tracert и т.п.)

Параметры коснольной задачи:

  • Assembly – полное имя сборки млм ссылка на сборку. Обычно указывается ссылка (EnterpriseManagement!SdkDataAccessAssembly)
  • Handler – полное имя класса-обработчика
  • Parameters – отпределяет список параметров, которые передаются в обработчик
  • Criteria – позволяет создать фильтр, который задает условие отображения задачи в зависимости от свойств выбранного элемента

Если вы захотите создать свой обработчик, то вы должны создать класс, наследованный от класса Microsoft.EnterpriseManagement.ConsoleFramework.TaskHandler (определен в сборке Microsoft.EnterpriseManagement.UI.Foundation) и переопределить один или оба метода DoTask:

public virtual void DoTask(NavigationModelNodeBase navigationNode, NavigationModelNodeTask task);
public virtual void DoTask(IList<NavigationModelNodeBase> navigationNodes, NavigationModelNodeTask task);

ВНИМАНИЕ! Здесь и далее приводится описание классов и методов, не поддерживаемых Microsoft. Информация предоставлена “как есть”, без каких либо гарантий.

CommandLineHandler

Данный обработчик имеет следующее описание:

<ConsoleTask ID="ConsoleTask.94b96f8849a64a2bbe619e2f627c2d2a" Accessibility="Public" Enabled="true" Target="WorkItem!System.WorkItem.Incident" RequireOutput="true">
  <Assembly>EnterpriseManagement!SdkDataAccessAssembly</Assembly>
  <Handler>Microsoft.EnterpriseManagement.UI.SdkDataAccess.CommandLineHandler</Handler>
  <Parameters>
    <Argument Name="LoggingEnabled">False</Argument>
    <Argument Name="Application">c:windowssystem32ping.exe</Argument>
    <Argument Name="WorkingDirectory">%windir%system32</Argument>
    <Argument Name="">$Context/Path[Relationship='CustomSystem_WorkItem_Library!System.WorkItemAboutConfigItem' TypeConstraint='CustomMicrosoft_Windows_Library!Microsoft.Windows.Computer']/Property[Type='CustomMicrosoft_Windows_Library!Microsoft.Windows.Computer']/NetbiosComputerName$</Argument>
  </Parameters>
</ConsoleTask>

Описывать все параметры смысла нет, их легко сопоставить с соответствующими параметрами в UI:

image

Единственное, хотелось бы отметить опцию “Вести журнал действий во время выполнения задачи”. При включении этой опции вывод задачи записывается в журнал действий элемента:

3is44i1i

ConsoleTaskHandler

Этот обработчик отвечает за запуск любых консольных задач. В качестве параметров для этого обработчика передаются полное название сборки (первый параметр) и полное имя класса (второй параметр) и параметры для этого класса (все последующие параметры):

<ConsoleTask ID="RunReportAction" Accessibility="Public" Enabled="true" Target="Microsoft.EnterpriseManagement.ServiceManager.UI.Administration.RunReportActionCategory" RequireOutput="false">
  <Assembly>SdkDataAccessAssembly</Assembly>
  <Handler>Microsoft.EnterpriseManagement.UI.SdkDataAccess.ConsoleTaskHandler</Handler>
  <Parameters>
    <Argument Name="Assembly">Microsoft.EnterpriseManagement.ServiceManager.UI.Administration</Argument>
    <Argument Name="Type">Microsoft.EnterpriseManagement.ServiceManager.UI.Administration.Reporting.ReportTaskHandler</Argument>
  </Parameters>
</ConsoleTask>

Если вы захотите создать свой собственный класс для передачи его в обработчик, вам необходимо создать класс, наследованный от класса Microsoft.EnterpriseManagement.UI.SdkDataAccess.ConsoleCommand (сборка Microsoft.EnterpriseManagement.UI.SdkDataAccess) и переопределить метод ExecuteCommand:

public virtual void ExecuteCommand(IList<NavigationModelNodeBase> nodes, NavigationModelNodeTask task, ICollection<string> parameters);

MultiSelect

Если вы заметили, некоторые задачи могут выполнять при нескольких выделенных элементах. Признаком того, что задача может выполняться на нескольких элементах, является наличие записи о данной задаче в секции Categories с атрибутом MultiSelectTask:

<Category ID="Microsoft.EnterpriseManagement.ServiceManager.UI.Console.MultiSelectTask.ActivateIncident" Target="System.WorkItem.Incident.ActivateIncidentCommand.Task" Value="SMConsole!Microsoft.EnterpriseManagement.ServiceManager.UI.Console.MultiSelectTask" />

Здесь Target – это внутреннее имя задачи.

Default Task

Для каждого элемента можно назначить задачу по-умолчанию. Она будет отличаться от других тем, что её можно запустить двойным щелчком на элементе в консоли. В интерфейсе такие задачи выделены жирным:

sn3gral4

Для того, чтобы установить задачу как задачу по умолчанию, необходимо добавить в категории данную задачу с атрибутом Microsoft.EnterpriseManagement.ServiceManager.UI.Console.MultiSelectTask:

<Category ID="ServiceManager.IncidentManagement.Library.Category.AutomaticIncidentChange" Target="ServiceManager.IncidentManagement.Library.Task.AutomaticIncidentChange" Value="SMConsole!Microsoft.EnterpriseManagement.ServiceManager.UI.Console.DoubleClickTask" />

Здесь Target – это внутреннее имя задачи.

Поделиться в соц. сетях

Primary Sidebar