TCM 与 PowerShell 的输出格式
Output format of TCM with PowerShell
我尝试使用 PowerShell 和 TCM.exe 获取特定测试计划的所有测试套件的列表,方法如下:
$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
是否可以将结果作为列表或 table 以便我可以遍历这些套件?
问候
约翰内斯
如果你执行一个外部程序,你总是得到一个字符串。为了接收字符串 table,您首先调用
$listOfSuites.split("`r`n")
得到一个字符串数组,然后你需要通过 line-filled 中那些字符串的偏移量来解析这些字符串(在你的例子中,0 到 9 是 "id",11 到结束是 "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
是外部命令的结果,没有带破折号的行和 header 格式如下:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
完成后,您可以将每个字符串变成一个 New-Object PSObject -property @{"Id"=$parsedid;"Name"=$parsedname}
并为自己创建一个定制的 objects 列表以供使用。该技术在同一示例中进行了演示。
我尝试使用 PowerShell 和 TCM.exe 获取特定测试计划的所有测试套件的列表,方法如下:
$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
是否可以将结果作为列表或 table 以便我可以遍历这些套件?
问候 约翰内斯
如果你执行一个外部程序,你总是得到一个字符串。为了接收字符串 table,您首先调用
$listOfSuites.split("`r`n")
得到一个字符串数组,然后你需要通过 line-filled 中那些字符串的偏移量来解析这些字符串(在你的例子中,0 到 9 是 "id",11 到结束是 "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
是外部命令的结果,没有带破折号的行和 header 格式如下:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
完成后,您可以将每个字符串变成一个 New-Object PSObject -property @{"Id"=$parsedid;"Name"=$parsedname}
并为自己创建一个定制的 objects 列表以供使用。该技术在同一示例中进行了演示。