如何按名称过滤一列,然后从另一列获取价值?

时间:2019-08-16 22:13:03

标签: excel powershell

我正在编写一个脚本,该脚本将使用url并获取其证书信息。我已经建立了证书部分,并且需要有关excel的帮助。 我将所有URL存储在一个很大的excel文件中。

我可以使用

导入
$xcel = Import-CSV C:\path\test.csv

然后我可以查看该工作表中的不同值

$xcel | get-member

现在在这里我可以看到所有不同的列名

我想做的是按列过滤,然后取另一个列值。

例如,一列具有TYPE字符串,下一列具有URL字符串

我想按特定的TYPE排序,然后采用每个URL类型

我该怎么做?

我(今天)对Powershell超级陌生,我正在尝试类似的东西

$xcel | foreach{if($_.TYPE -like "example"){$url = $_.URL}}

理想情况下,我想将每个匹配的列URL存储在一个变量中,然后在构建的用于检索证书的Certificate函数中使用。

如何为if添加其他过滤器,然后获取每个返回的URL并将每个URL传递给Certificate函数?

1 个答案:

答案 0 :(得分:2)

如果只关心URL标头,则可以执行以下操作:

$xcel.where({$_.TYPE -eq "example"}) | Foreach-Object {
    $url = $_.URL
}

如果只想创建URL的集合,则只需执行以下操作。然后$urls将是一个URL数组,或者您可以通过Foreach-Object或按索引($url[0]$url[1]等)单独访问它们。

$urls = $xcel.where({$_.TYPE -eq "example"}).URL

说明:

.where()方法仅过滤$xcel值为TYPE的行来过滤example数组。然后将这些结果行通过管道传输到Foreach-Object中。 $URL将保留当前管道对象($_)(即当前行)的URL属性值。在该Foreach-Object脚本块中,您可以使用$URL进行其余的操作。


另一种解决方案是对第一个方案进行细微改动。您可以使用if语句方法,这可以为您在每一行中提供更大的灵活性。

$xcel | Foreach-Object {
   if ($_.TYPE -eq "example") {
      $URL = $_.URL
   }
   else {
      $URL = $null
   }
}