Выходной формат TCM с PowerShell
Я пытаюсь получить список всех моих TestSuites определенного TestPlan с 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
Можно ли получить результат в виде списка или таблицы, чтобы можно было повторять эти наборы?
С уважением, Йоханнес
1 ответ
Вы всегда получаете одну строку, если выполняете внешнюю программу. Для того, чтобы получить таблицу строк, вы сначала позвоните
$listOfSuites.split("`r`n")
чтобы получить массив строк, вам нужно проанализировать эти строки по смещению этих строк в строке, заполненной строкой (в вашем случае от 0 до 9 - это "id", от 11 до конца - "Name"). Пример (взят из этого скрипта):
$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}
и получите список специально созданных для работы объектов. Техника демонстрируется в том же примере.