【问题标题】:How to create managerID lookup hashtable [duplicate]如何创建managerID查找哈希表[重复]
【发布时间】:2016-06-15 23:27:12
【问题描述】:

过去,当在另一个 CSV 中查找时,我成功地创建了哈希表以在 CSV 中查找一个 ID 的完全匹配,但我尝试做的事情必须非常不同?我有 1 个 CSV,每个人都有一个唯一的 LoginID,然后是一个 PositionID。然后在另一列中,我有“向 PositionID 报告”,经理 PositionID 在那里。我想根据他们的PositionID查找经理的LoginID,但是尝试了几种方法都没有成功。

即使我删除空的第一行,CSV 示例似乎也无法在交叉引用到职位 ID 标题的报告中获取 Bob 的人员 ID:

Person ID Position ID Legal First Name Reports To Position ID
            YQM000051 黛安 YQM000076
S9999991 YQM000052 CHARISSE YQM000076
S9999992 YQM000052 CHARISSE YQM000076
s9999993 YQM000052 CHARISSE YQM000076
s9999994 YQM000076 鲍勃 YQM000071

【问题讨论】:

  • 这是您在几个小时内第三次问基本相同的问题。请不要那样做。

标签: csv powershell


【解决方案1】:

如果没有看到任何示例,您的问题有点难以理解,但我想您可以执行以下操作:

#Imports CSV file as variable
$Csvfile = Import-Csv -Path "C:\SomePath\file.csv" -Delimiter "," 

#Change 1513 to the actual managers PositionID
$Csvfile | Where {$_.PositionID-eq "1513"} | Select -ExpandProperty LoginID

为了测试,我创建了一个带有一些随机数的快速 csv:

loginID PositionID  ReportstoPositionid
1111    3654        1513
2222    1513        54123
3333    54123       16543564
4444    156413      156413
5555    16543564    3654

然后我决定 1513 将是经理职位代码,然后运行上面的 PowerShell 命令以获取登录 ID。

PS C:\> $Csvfile | Where {$_.PositionID -eq "1513"} | Select -ExpandProperty LoginID
2222

如果您想在没有变量的情况下完成这一切,您可以执行以下操作:

PS C:\> Import-Csv -Path "C:\SomePath\file.csv" -Delimiter "," | Where {$_.PositionID -eq "1513"} | Select -ExpandProperty LoginID
2222

最后,如果您想查看 csv 文件中的完整行,可以删除 select 语句。示例:

loginID PositionID ReportsPositionid
------- ---------- -----------------
2222    1513       54123 

同样,您的问题有点难以理解,但根据我在这里阅读的内容,我得出了结论。

希望这会有所帮助!

编辑

用样本数据测试后,我相信你可以使用以下方法:

$CSV1 = Import-Csv -Path "C:\Users\Tyler\Desktop\test1.csv" -Delimiter "," 
$Manager = $CSV1 | Where {$_.'Position ID' -eq 'YQM000076'} | Select -ExpandProperty "Legal First Name"

Write-Output "The Following Employees Report To $Manager :"

foreach ($Row in $CSV1)
    {
        if ($Row.'Reports to Position ID' -eq 'YQM000076')
            {
                Write-Output "$Row"
            }
    } 

输出

The Following Employees Report To Bob :
@{Person ID=; Position ID=YQM000051; Legal First Name=DIANE; Reports To Position ID=YQM000076}
@{Person ID=S9999991; Position ID=YQM000052; Legal First Name=CHARISSE; Reports To Position ID=YQM000076}
@{Person ID=S9999992; Position ID=YQM000052; Legal First Name=CHARISSE; Reports To Position ID=YQM000076}
@{Person ID=S9999993; Position ID=YQM000052; Legal First Name=CHARISSE; Reports To Position ID=YQM000076} 

【讨论】:

  • 嗨,Tyler,我在输入 ReportstoPositionID 时没有收到任何数据?我从一个有很多经理和员工的大名单中抽出来?我的标题在单词之间有空格?我使用'single' 或$Row.'Position ID'。这有帮助吗?
  • 嗯,我在示例中的标题中添加了空格,然后将 $_.PositionID 更改为 $_.'Position ID',我收到了与上面发布的相同的结果。您的 csv 与我上面的示例有多相似?如果可能的话,您能否使用 csv 的前 5 行(包括标题)来编辑您的问题?您可以更改数据,我想以完全相同的格式运行一些测试。另外如何保存csv?这是常规 csv、csv (MS-DOS) 还是 csv (Macintosh)?
  • 您运行的是哪个版本的 PowerShell?运行以下命令以查明:$PSVersionTable.PSVersion.Major 不确定它是否重要,但我可能正在使用较新版本的 PowerShell 中引入的东西。
  • 我在 4.0 上,将使用示例标题和数据编辑主要问题。我似乎无法弄清楚这一点。谢谢...
  • 好的,是的,在第 4 版中,您绝对不会看到上述命令有任何问题。我将使用您发布的示例数据,并根据我的发现回复您。谢谢
猜你喜欢
  • 2017-07-26
  • 2012-01-02
  • 2017-01-19
  • 1970-01-01
  • 2012-11-13
  • 2011-09-20
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多