首页 > 解决方案 > Powershell 脚本使用来自 .txt 或 .csv 的输入在第二个 .csv 文件中查找值

问题描述

群,第一次发问题,请耐心等待。尝试使用 Powershell 读取 1 个 .csv 文件并在第二个 .csv 中搜索与我从第一个 .csv 文件传递​​的内容相关的特定数据。假设这两个文件都包含一个标题为“名称”的列,该列中包含 PC 名称列表。第二个 CSV 文件还有一个标题为“id”的列,其中包含与该 PC 名称关联的唯一 ID(更复杂的是,可能有重复的 PC 名称,但每个都有唯一的 ID)。我想处理第一个 .csv 文件中的所有 PC 名称,在第二个 .csv 文件中搜索该 PC 名称的相应唯一 ID,然后将其设置为变量,以便我可以对其执行一些操作。下面的代码是我到目前为止所拥有的,我 m 手动提供 PC 名称,因为我似乎无法获取第一个文件的内容并将其传递给第二个文件。它将获得唯一 ID,但我似乎无法将其放入变量中。任何帮助,将不胜感激。

$computer = "T4763110"
$csv = Import-Csv "C:\Devices.csv"
$csv | Where-Object { $_.name -eq $computer } | % id

第一个 CSV 文件 第一个 CSV 文件

第二个 CSV 文件 第二个 CSV 文件

标签: powershellcsvparsing

解决方案


您忘记Delimiterimport-csv. 当您使用基本的 Microsoft 编辑器打开 .csv 文件时,您可以查看分隔符。我的看起来像这样:

ID;Name
1;Alienware
2;Lexware
3;One
4;Chip
5;Stack
6;Linux

我为自己创建了一个名为 dev.csv 的新表,其中包含以下内容:

在此处输入图像描述

执行此代码时:

> $csv = Import-Csv "C:/Users/Desktop/dev.csv" -Delimiter ';'
> $csv

输出:

ID Name
-- ----
1  Alienware
2  Lexware
3  One
4  Chip
5  Stack
6  Linux

然后执行这个:

 > $csv | where-object {$_.name -eq "Alienware"} | % id
    1

要将其保存到变量中,只需将括号括起来即可。

 > $idvar = ($csv | where-object {$_.name -eq "Alienware"} | % id)
 > $idvar
   1

推荐阅读