Sir*_*lot 2 c# powershell scripting visual-studio-2013
需要将此PowerShell脚本集成到我的C#汇编代码中.不知道怎么做.如果需要任何其他信息,请不要犹豫.提前致谢.
PowerShell脚本:
#Script that does the linking and renaming:
# Creates a variable called IncidentID and points Incident # to it for use within the script
Param(
[string]$IncidentID
)
# Load the SMlets module
Import-Module SMlets
# Get the Incident Class
$IncClass = Get-SCSMClass -Name System.WorkItem.Incident$
# Get the RMA Class
$RMAClass = Get-SCSMClass -Name COMPANY.RMA.Class
# Build the Filter String
$FilterStr = "ID -eq " + $IncidentID
# Find the Incident we need to link to an RMA
$Inc = Get-SCSMObject -Class $IncClass -Filter $FilterStr
$RMAIncText = "[Linked to Incident " + $Inc.ID + "]"
$RMADescription = $RMAIncText
New-SCSMObject -Class $RMAClass -PropertyHashtable (@{Title = $Inc.Title; Description = $RMADescription})
# Find the new RMA to be linked
$FilterStr = "Description -eq '$RMADescription'"
$RMA = Get-SCSMObject -Class $RMAClass -Filter $FilterStr
#Set RMA Number Variable
$RMANumber = $RMA.RMA_ID;
#Clean up DisplayName, Title and Description
$RMA | Set-SCSMObject -PropertyHashtable @{"DisplayName" = $RMANumber; "Title" = $RMANumber; "Description" = $RMANumber;}
## Create an Incident Related Items instance referencing the new RMA
$RWIClass = Get-SCSMRelationshipClass -Name System.WorkItemRelatesToWorkItem$
New-SCSMRelationshipObject -Relationship $RWIClass -Source $Inc -Target $RMA -Bulk
# Unload the SMlets module
Remove-Module SMlets
Run Code Online (Sandbox Code Playgroud)
汇编代码:
public class RMATask : ConsoleCommand
{
public RMATask()
{
}
public override void ExecuteCommand(IList<NavigationModelNodeBase> nodes, NavigationModelNodeTask task, ICollection<string> parameters)
{
IManagementGroupSession session = (IManagementGroupSession)FrameworkServices.GetService<IManagementGroupSession>();
EnterpriseManagementGroup emg = session.ManagementGroup;
ManagementPack mp = emg.ManagementPacks.GetManagementPack(new Guid("a82d62c5-ece0-35fd-a266-9afa246dea78"));
ManagementPackClass mpc = emg.EntityTypes.GetClass(new Guid("4b081ab1-f48e-9c62-77bc-76bc31349030"));
ManagementPackObjectTemplate mpt = emg.Templates.GetObjectTemplate(new Guid("92ed7c4d-aff5-819e-90f8-c92064c50cd6"));
NavigationModelNodeBase nodeIn = nodes[0];
NavigationModelNodeBase nmnbNew;
NavigationModelNodeTask nmntNew = NavigationTasksHelper.CreateNewInstanceLink(mpc, mpt);
Microsoft.EnterpriseManagement.GenericForm.GenericCommon.MonitorCreatedForm(nodeIn, nmntNew, out nmnbNew);
}
}
Run Code Online (Sandbox Code Playgroud)
对于那些对这里的细节感兴趣的人,他们是:问题基本上,我们有帮助台分析师产生事件.有时,他们可能需要生成RMA(退货授权,如果您不知道这意味着什么,只知道这是他们需要填写的另一种形式),并且RMA需要与事件相关联.事件不需要有RMA,但每个RMA都需要附加到其相应的父事件.
为此,我创建了一个名为COMPANY.RMA.Class的新类,在Visual Studio中从头开始创建一个新表单,并将MP(管理包)XML和表单程序集(.dll)打包到MPB(管理包捆绑包)中.我将其上传到控制台,并创建了一个名为"创建RMA"的新控制台任务,该任务在选择事件模块时变得可见.
此任务将启动我的PowerShell脚本,该脚本将获取所选或打开的事件的ID,创建RMA对象,并将创建的RMA对象与事件的ID#相关联(允许稍后在"相关项目"事件标签".但是,我遇到了一个问题.我正确地创建了链接功能,但是我无法让RMA表单在创建后自动打开.相反,当任务运行时,它会创建对象并保存它,但分析师必须关闭事件并重新打开它以刷新新数据,导航到"相关项"选项卡,然后选择要创建的新创建的RMA它并填写表格.这是一项额外的工作,应予以消除.正确的功能应该是创建RMA表单,将其与打开/选定事件相关联,然后启动刚刚创建的RMA表单以允许分析人员填写其详细信息.
显然,没有直接从控制台任务调用/启动表单的功能.看来我必须直接修改汇编代码才能访问SCSM SDK(我需要工作的层).这就是我丢失的地方 - 我不知道如何将我的PowerShell脚本转换为C#汇编代码.任何帮助将不胜感激.
归档时间: |
|
查看次数: |
1554 次 |
最近记录: |