【问题标题】:How can I filter one column by name, then take value from another column?如何按名称过滤一列,然后从另一列中获取值?
【发布时间】:2019-08-16 22:13:03
【问题描述】:

我正在编写一个脚本,它将获取一个 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 存储在一个变量中,然后在我为检索证书而构建的证书函数中使用。

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

【问题讨论】:

    标签: excel powershell


    【解决方案1】:

    如果您只关心 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
       }
    }
    

    【讨论】:

    • 很好,我不知道.where。所以这两条线都按预期工作。他们遍历 TYPE 中的所有列,然后获取相应的 URL。但是我怎样才能使它不只是循环整个文件并最终得到一个值呢?我怎样才能将这些值中的每一个传递给我的其他函数来运行?
    • 在这种情况下,您有几个选择。 1)您可以在每次循环迭代期间调用您的函数(当 $URL 更改时)。 2) 您可以将所有 URL 值存储到一个数组中,然后将其传递给函数。根据您的函数的设置方式,您可以直接从这个 Foreach-Object 管道到您的函数。您的函数希望如何接收输入?
    • 好问题。现在它只是静态设置为“github.com”的 url,我确实有一个参数被注释掉,如 ``` param($url) ```,我今天才开始。我应该在某处发布代码以查看吗?也非常感谢您的帮助
    • 好吧。我确实提供了将所有 URL 存储到一个变量 $urls 中的更新。如果您的函数只有一个参数,那么您可以使用$urls | Foreach-Object { yourfunction $_ } 之类的参数。如果您只是传递给另一个函数,从技术上讲,您甚至不需要 URL 变量。您可以在原来的foreach-object 中调用yourfunction $_.URL
    • 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多