首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PowerShell实现TCM输出格式

用PowerShell实现TCM输出格式
EN

Stack Overflow用户
提问于 2015-06-19 08:53:31
回答 1查看 114关注 0票数 0

我试图通过以下方式获得一个包含TestSuites和TCM.exe的特定TestPlan的列表:

代码语言:javascript
复制
$listOfSuites = & "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TCM.exe" suites /list /planid:1234

我得到了正确的结果,但是它被格式化为一个字符串,如下所示:

代码语言:javascript
复制
Id        Name                                                              --------- ----------------------------------------------------------------  1235      Test Project                                                 1236      Test Project -> Manual Tests -> First TestSuite            1237      Test Project -> Manual Tests -> Second TestSuite

是否有可能以列表或表的形式获得结果,以便我可以迭代这些套件?

问候约翰斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 09:10:16

如果执行外部程序,则始终得到单个字符串。为了接收字符串表,首先调用

代码语言:javascript
复制
$listOfSuites.split("`r`n")

若要获得字符串数组,则需要通过行填充字符串中的字符串偏移量来解析这些字符串(在您的示例中,0至9为"id",11结尾为"Name")。一个例子(取自这个剧本):

代码语言:javascript
复制
$starters = New-Object psobject -Property @{"SessionName" = 0; "Username" = 0; 
     "ID" = 0; "State" = 0; "Type" = 0; "Device" = 0;};

foreach($line in $c) {
     if($line.trim().substring(0, $line.trim().indexof(" ")) -eq "SESSIONNAME") {
            $starters.Username = $line.indexof("USERNAME");
            $starters.ID = $line.indexof("ID");
            $starters.State = $line.indexof("STATE");
            $starters.Type = $line.indexof("TYPE");
            $starters.Device = $line.indexof("DEVICE");
            continue;
        }

        New-Object psobject -Property @{
            "SessionName" = $line.trim().substring(0, $line.trim().indexof(" ")).trim(">")
            ;"Username" = $line.Substring($starters.Username, $line.IndexOf(" ", $starters.Username) - $starters.Username)
            ;"ID" = $line.Substring($line.IndexOf(" ", $starters.Username), $starters.ID - $line.IndexOf(" ", $starters.Username) + 2).trim()
            ;"State" = $line.Substring($starters.State, $line.IndexOf(" ", $starters.State)-$starters.State).trim()
            ;"Type" = $line.Substring($starters.Type, $starters.Device - $starters.Type).trim()
            ;"Device" = $line.Substring($starters.Device).trim()
    } 

$c是一个外部命令的结果,该命令没有带有破折号的行和格式化为这种格式的头:

代码语言:javascript
复制
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE

一旦这样做,您就可以将每个字符串转换为一个New-Object PSObject -property @{"Id"=$parsedid;"Name"=$parsedname},并为自己提供一个定制对象列表以供使用。该技术在同一个例子中得到了演示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30933922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档