使用PowerShell输出TCM的格式

时间:2015-06-19 08:53:31

标签: powershell tcm

我尝试使用PowerShell和TCM.exe获取特定TestPlan的所有TestSuite列表:

$listOfSuites = & "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TCM.exe" suites /list /planid:1234

我得到了正确的结果,但它被编码为单个字符串,如:

Id        Name                                                              --------- ----------------------------------------------------------------  1235      Test Project                                                 1236      Test Project -> Manual Tests -> First TestSuite            1237      Test Project -> Manual Tests -> Second TestSuite

是否可以将结果作为列表或表格获取,以便我可以遍历这些套件?

此致 约翰内斯

1 个答案:

答案 0 :(得分:0)

如果执行外部程序,总会得到一个字符串。要接收字符串表,请先调用

$listOfSuites.split("`r`n")

获取一个字符串数组,然后你需要通过在行填充的字符串中的那些字符串的偏移来解析这些字符串(在你的情况下,0到9是“id”,11到end是“Name”)。一个例子(取自this script):

$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是来自外部命令的结果,该命令没有带破折号的行和标题格式如下:

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE

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