PowerShell:从API响应中检索特定单词&;编译成HTML表

PowerShell:从API响应中检索特定单词&;编译成HTML表,powershell,Powershell,我试图从API中检索特定单词,不幸的是,API响应只是一个正文响应,其中包含以下文本-示例如下: 他们发现,这是由于与第三方工作室Square Humber存在争议,Square Humber已经联系并正在制定解决方案。问题解决后将进行更新,等待团队反馈。事件指挥官:巴里·詹姆斯 补救措施INC1063757 PD 387049 检索“Barrie James”和INC号码(INC1063757)的最佳方式是什么。不幸的是,我已经被困在这个问题上一段时间了,因为可能会有多个不同的事件,这意味着名

我试图从API中检索特定单词,不幸的是,API响应只是一个正文响应,其中包含以下文本-示例如下:

他们发现,这是由于与第三方工作室Square Humber存在争议,Square Humber已经联系并正在制定解决方案。问题解决后将进行更新,等待团队反馈。
事件指挥官:巴里·詹姆斯
补救措施INC1063757 PD 387049

检索“Barrie James”和INC号码(INC1063757)的最佳方式是什么。不幸的是,我已经被困在这个问题上一段时间了,因为可能会有多个不同的事件,这意味着名称和公司编号将发生变化


有什么想法吗?

假设您将此API的响应分配给一个变量,
$response
,我们首先需要将它从一个字符串分解为一个字符串数组,我们将这样做

 $response = Invoke-RestMethod -uri www.mycoolsite.com #or maybe Invoke-WebRequest
 $response
 >They have found that this is due to in issue with the 3rd party Studio, Square Melon, who have been contacted and are working on a solution. Updates to follow once the issue has been resolved, pending feedback from the teams.
Incident Commander: Barrie James
Remedy INC1063757 PD 387049

 $response.Count
 >1

 #we need response to be an array of strings for Select-string to work.  
 $response.Split("`n").Count
 >3
我们对变量
$response
调用了
Split()
方法,并在它看到隐藏的
'n
PowerShell新行字符的任何地方将其分解

接下来,我们可以使用
|
管道字符将字符串数组发送到
Select String
并查找其中包含特定字符串的行

$response.Split("`n") | select-string "Incident Commander:"
将结果解析为有用的内容,如下所示

$response.Split("`n") | select-string "Incident Commander:"
IgnoreCase : True
LineNumber : 2
Line       : Incident Commander: Barrie James
Filename   : InputStream
Path       : InputStream
Pattern    : Incident Commander:
Context    : 
Matches    : {0}
从这里,我们只需选择line属性,其中包含文本
Incident Commander:Barrie James

($response.Split("`n") | select-string "Incident Commander:").Line
>Incident Commander: Barrie James
剩下的就是去掉冒号,我们将使用
.Split()
方法来完成。 这将在看到我们提供的字符的地方将字符串分成单独的字符串

($response.Split("`n") | select-string "Incident Commander:").Line.Split(":")
Incident Commander
 Barrie James
现在,只选择第二项,这是我们使用索引进行的。PowerShell中的索引从零开始(当然),因此我们实际上要求“索引1处的项”,这意味着第二个位置

($response.Split("`n") | select-string "Incident Commander:").Line.Split(":")[1].Trim()
Barrie James

就这样。这就是你怎么做的,我们为什么要做每一步。

如果你只得到文本,正则表达式或convertfrom字符串可能会工作。哇,太棒了,非常感谢!那么,我怎样才能把所有这些都放到ForEach语句中,这样我才能得到所有的响应呢?然后我需要将其输入到HTML表行中:这是一个不同的问题,因为我们需要知道响应列表是什么样的。建议你接受这一点作为答案,然后再问另一个问题,具体说明你还想做什么。