【问题标题】:Need to match up fields in 2 CSV files, and then based on the contents of a field, return another field需要匹配2个CSV文件中的字段,然后根据一个字段的内容,返回另一个字段
【发布时间】:2020-03-09 05:13:48
【问题描述】:

我正在尝试在两个第三方支持服务之间确定我们的哪些工单在两个门户上都显示为已关闭。我有一个 CSV 导出的票证,并且都有相关的字段。

到目前为止,我有这个:

$EXTrange = Import-Csv -Path '/Range.csv'
$INTrange = Import-Csv -Path '/export (14).csv'

$ClosedInternal = $INTrange |
                  Where-Object status -eq "Closed"
$ICTickets = $EXTrange |
             Where-Object "Customer Ticket Reference" -eq $ClosedInternal

foreach ($thing in $ClosedInternal) {
    Write-Host $ICTickets."Ticket ID"
}

客户票证参考和 ID 字段将匹配,因为它们是我们的票号。

我只需要比较这两个列表,匹配外部和内部参考字段,检查它是否处于关闭状态,如果是然后告诉我在$EXTrange."Ticket ID" 中保存的外部公司票证。

我觉得我很接近,但不知道如何返回每个已关闭的匹配票的票 ID。

【问题讨论】:

标签: powershell csv compare


【解决方案1】:

$ClosedInternal 大概是一个数组,并且还包含对象,而不仅仅是您要检查的属性的值。将其与简单值进行比较总是会产生“不等于”的结果。如果要检查值列表中是否存在特定值,则需要 -contains 运算符(如果您至少运行 PowerShell v3,则需要 -in 运算符),并且需要展开相关属性的对象列表来获取要比较的值列表。

改变这个:

$ClosedInternal = $INTrange |
                  Where-Object status -eq "Closed"
$ICTickets = $EXTrange |
             Where-Object "Customer Ticket Reference" -eq $ClosedInternal

进入这个:

$ClosedInternal = $INTrange |
                  Where-Object status -eq "Closed" |
                  Select-Object -Expand 'Ticket ID'
$ICTickets = $EXTrange |
             Where-Object $ClosedInternal -contains "Customer Ticket Reference"

并且代码应该做你想做的事。如果内部工单的 ID 属性名称不同,请将 'Ticket ID 替换为正确的名称。

【讨论】:

  • 这几乎可以工作,确实我对其进行了调整并使其工作并立即再次将其破坏:(随后的 foreach 只是将空数据列出到 ISE 控制台中。$closedinternal 确实返回了内部票证参考但似乎没有扩展 $extrange."ticket ID" 字段
  • @SamuelA 如果您认为您的评论提供了任何可以让我猜测新问题可能是什么的信息:它没有。使用更新代码和问题的更详细描述更新您的问题,或发布后续问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多