Powershell 创建 CSV 文件

dpj*_*dpj 5 csv powershell compare

我是 powershell 新手。但是学习......我的脚本距离实现我想要的还很远。我只是想念最后一部分。我希望有人可以 我遇到的问题是在创建 CSV 文件时没有得到正确的结果。

好的,我有一个类似这样的 CSV 文件:

A           B
AAAA        111111
CCCC        222222
EEEE        333333
HHHH        444444
Run Code Online (Sandbox Code Playgroud)

现在我有一个包含以下信息的数组:

AAAA
BBBB
CCCC
DDDD
HHHH
Run Code Online (Sandbox Code Playgroud)

我将数组中的值与 CSV 文件进行比较。我想收到B列的结果。

这工作正常。我收到这个结果:

111111
222222
444444
Run Code Online (Sandbox Code Playgroud)

所以基本上这个是正确的。但是......我需要收到这个:

111111

222222

444444
Run Code Online (Sandbox Code Playgroud)

因此,当找不到该值时,我想要一个空单元格

我希望我的问题足够清楚;)

我的代码是这样的:

$CSV = import-csv C:\tmp\mac-vendors-export.csv -Delimiter ';'
$vendormacarray = $Vendormac
$vendorname = foreach ($UniqueVendorMac in $Vendormacarray) {
    $csv | where-object {$_.A -match $UniqueVendorMac} | select-object  -Expand B
}
Run Code Online (Sandbox Code Playgroud)

我想我必须添加类似-or $_.A -eq 'null'......的内容,但无法弄清楚最后一部分。

希望有人能帮我解答这个问题。

谢谢

San*_*zon 3

使用哈希表将项目存储A为键,将项目存储为B值,这样您可以在与 进行比较时执行快速查找$vendormacarray

一个例子:

$map = @{}
Import-Csv C:\tmp\mac-vendors-export.csv -Delimiter ';' | ForEach-Object {
    $map[$_.A] = $_.B
}

$vendorMac = @(
    'AAAA'
    'BBBB'
    'CCCC'
    'DDDD'
    'HHHH'
)

$vendorMac | ForEach-Object {
    [pscustomobject]@{
        MAC      = $_
        ThingInB = $map[$_]
    }
}
Run Code Online (Sandbox Code Playgroud)

那么使用您问题中的数据的输出将类似于:

$map = @{}
Import-Csv C:\tmp\mac-vendors-export.csv -Delimiter ';' | ForEach-Object {
    $map[$_.A] = $_.B
}

$vendorMac = @(
    'AAAA'
    'BBBB'
    'CCCC'
    'DDDD'
    'HHHH'
)

$vendorMac | ForEach-Object {
    [pscustomobject]@{
        MAC      = $_
        ThingInB = $map[$_]
    }
}
Run Code Online (Sandbox Code Playgroud)