【问题标题】:Loop through a query in powershell TFS在 powershell TFS 中循环查询
【发布时间】:2015-05-29 23:37:42
【问题描述】:

我是 TFS 和 powershell 脚本的新手。作为我的任务的一部分,我得到了一项任务,其中

我有一个带有 TFS 工作项 ID 的数组,我需要遍历并 获取这些 id 的详细信息并显示结果。

作为其中的一部分,我尝试如下所示

$TFSSERVER = "https://server"
$WId = @("1", "2", "3", "4")
$arr = @("")
$i = 0

Function Get-WorkItemData($WId)
{
   foreach($Id in $WId) 
   {
       $i++
       $query = "SELECT [System.Id]  
          FROM WorkItemLinks " +
          "WHERE [Source].[System.id] = $Id" +  
          "AND [System.Links.LinkType] = 'Parent'" 

      if($WId.length -ge $i)
      {
         $arr+= $query
      }
   }

      $wiData = tfpt query /collection:$TFSSERVER /wiql:$arr
      $wiData | out-file "C:\Path"
 } 

这是我运行脚本时遇到的错误

TFPT.EXE : 期望字符串结束。该错误是由 ½SELECT╗ 引起的。 在行:28 字符:22 + $wiData = tfpt

谁能帮我解决错误并获取所有详细信息的列表。请帮帮我。

【问题讨论】:

  • 您的$query = "SELECT 行没有结束引号和+,下一行没有开始引号。
  • 感谢@TheMadTechnician 的回复,您能告诉我如何解决这个问题

标签: powershell for-loop tfs tfs-power-tools


【解决方案1】:

我不知道这是否会解决您的错误,但您至少在以$query= 开头的行以及以下行有语法问题。为了解决这个问题,我可能会使用长单行字符串(实际上就是你正在做的事情)或 HereString(如果你的可执行文件允许的话)。

单行字符串可以为你工作,虽然它很长而且阅读起来有点麻烦,但它确实避免了你遇到的问题。

$query = "SELECT [System.Id] FROM WorkItemLinks WHERE [Source].[System.id] = $id AND [System.Links.LinkType] = 'Parent'"

HereString 的格式与您上面的类似,但可能与您的应用程序不兼容。它的格式是第一行是@",后面没有任何内容,然后是你想要的多行文本,然后是以"@ 开头的一行。所以在你的情况下,它看起来像:

$query = @"
SELECT [System.Id]  
FROM WorkItemLinks
WHERE [Source].[System.id] = $Id
AND [System.Links.LinkType] = 'Parent'
"@

这可能无法满足您的需求,因为我不知道您的 TFPT.EXE 应用程序是否会接受多行字符串作为查询的输入(并且严重怀疑它是否允许它)。

如果您真的非常想继续像以前那样格式化它,您可以继续这样做,您至少需要修复该部分的第一行和第二行:

$query = "SELECT [System.Id] " +
    "FROM WorkItemLinks " +
    "WHERE [Source].[System.id] = $Id " +  
    "AND [System.Links.LinkType] = 'Parent';" 

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2021-12-23
    相关资源
    最近更新 更多