MKS完整性命令行API

时间:2013-05-16 11:44:16

标签: configuration-management command-line-tool mks mks-integrity

这里有没有人有为MKS Integrity命令行API构建解析器的经验。我打算构建一个API(在C#中)并且需要构建一个CLI结果解析器,我可以用它来解析CLI的结果。我听说CLI的结果不遵循任何特定的数据布局(没有字段分隔符等),并且可能会从版本更改为版本。这是真的?    我听说过JAVA和ANSI C api,但也听说过它们不支持CLI公开的所有功能。任何反馈都会有很大的帮助。

谢谢和问候, 乔。

5 个答案:

答案 0 :(得分:2)

祝你好运。解析MKS的输出非常困难。 例如,“si viewsandbox”命令通过缩进指示子项目结构。 以下是将成员映射到子项目的Perl代码段:

our %parentproject;
our @projects;
my @subprojects;
$subprojects[0] = $sandbox;
$projects[0] = $sandbox;
open MKS, "si viewsandbox -R -S $sandbox |" or die $!;
while () {
    chomp;
    next if /working file/i;
    next if /new revision available/i;
    my ($indentation, $filename, $project, $version, $type);
    if (m:^( +)$dir/(.+) archived (.+) *$:) {
        ($indentation, $filename, $version) = ($1, $2, $3);
    }
    if (m:^( +)$dir/(.+project) (\((.+)\) )?(.*subsandbox) *$:) {
        ($indentation, $project, $version, $type) = ($1, $2, $4, $5);
    }
    next unless $indentation;
    my $level = length($indentation) / 2 + 1;
    if ($project) {
        $subprojects[$level] = $project;
        $parentproject{$project} = $subprojects[$level - 1];
        push @projects, $project;
    }
    if ($filename) {
        $parentproject{$filename} = $subprojects[$level - 1];
    }
}

此脚本在Linux上运行,因此文件夹分隔符为/。您可能希望在Windows上的某些正则表达式中使用\。

请花些时间欣赏MKS产品的美感。该项目的直接成员 缩进1.子项目的成员缩进3.子项目的子项目的成员缩进为5.依此类推。

我会放弃,写绝对必要的临时脚本,但不会更多。 是的,输出确实在不同版本之间变化。有时。

答案 1 :(得分:1)

在命令中尝试使用--xmlapi选项,并以XML格式接收答案。

致以最诚挚的问候,

阿克塞尔

答案 2 :(得分:0)

@Joe Varghese,不确定你是否还在为此工作,但是(在使用MKS Integrity 2009的win7上)我可以做这样的事情:

si memberinfo --xmlapi [file_name_goes_here]

这将为您提供XML输出:

<?xml version="1.0"?>
<Response command="memberinfo" app="si" version="4.10.0 7-1 9665">
  <App-Connection port="7001" userID="some_ID" server="some_server"></App-Connection>
  <WorkItems selectionType="IMemberSelection">
    <WorkItem id="some_path_to_a_file" context="c:/Groups/MKS/IntegrityServer/some_path_to_a_project.pj" displayId="some_path_to_a_file" modelType="si.Member">
      <Field name="membername">

...

您需要将这些(或机器上的等效物)添加到Windows PATH变量中,以便它可以看到MKS CLI命令:

C:\ Program Files(x86)\ MKS \ IntegrityClient \ bin;

C:\ Program Files(x86)\ MKS \ Toolkit \ mksnt;

祝你好运。

答案 3 :(得分:0)

请记住,并非所有命令都可通过CLI或java API获得(请参阅底部的一些示例)

很可惜,从PTC Integrity 10.5开始,您不能仅仅依靠其中一个来自动化您的活动。

同样可惜的是,PTC Integrity没有提供有关这一切的稳定性的大量信息。我认为API更稳定(与其他工具一样)。

因此,根据您的使用情况,您可能需要使用CLI和--xmlapi选项并解析输出(这是地狱)。

关于C#,java等等。这完全取决于你。 API是用Java编写的,但你当然可以用C#,Python等用适当的包装器来调用它。我最近倾向于使用Groovy ......

f.e。适用于CM端的PTC Integrity 10.5(您可以在IM端获得类似的结果) 这里有一些命令只能通过API而不是通过CLI获得:

  • projectadd
  • projectci
  • projectco

这里有一些命令只能通过CLI而不是通过API获得:

  • acceptcp
  • addlabel
  • addmemberattr
  • addproject
  • addprojectlabel
  • addprojectmetric
  • applycp ... (共81个)

答案 4 :(得分:0)

我对问题,类型,字段等的解决方案是解析输出,当我看到一行文本没有前导空格但有冒号时,它是一个键:值对。如果下一行是前导空格,我可以追加,但是我将输出抛弃,包括前一行。仅直接解析符合标准键:值的行。

然后,对于我扔掉的那些字段名称,我将执行以下操作(这里的示例是一个问题):

im issues --fields =&#39; list,of,fieldnames&#39; item#然后用制表符分隔它们。如果您的字段可能包含选项卡,我会单独获取它而不包含其他字段。然后我有一个带有key = value对的perl关联数组。

我知道这不是最有效的,但它似乎准确地拉出字段进行解析。

我在perl中有另外一个函数,我把它放在一起读取类型,字段,查询,演示文稿(作为XML)。这要复杂得多。一旦我清理了更多,我可以回来重新发布。