【问题标题】:Powershell: Comparing a value between two arrays, and extracting a related valuePowershell:比较两个数组之间的值,并提取相关值
【发布时间】:2017-03-09 13:47:31
【问题描述】:

这就是我想要完成的。

我有一个新启动器的表单,New Starter Form.csv,它包含以下标题和信息:

名字、姓氏、团队名称、开始日期

乔,博客,安全管理员,01/01/18

我有一个名为 Team List.csv 的不同 csv,它具有以下标题和信息:

团队领导、团队名称、重组

A B,营销,RESMARKETING01G

C D,产品,RESPRODUCT01G

E F,Advertising,RESADVERTISING01G

G H,安全管理员,RESSECURITYADMIN01G

我想将这两个 CSV 文件导入 Powershell,运行一个比较,从 New Starter Form 中获取团队名称,并检查团队列表中是否有任何匹配项,如果有,将相关的 RES 组添加到AD 中的新首发。

目前,我可以导入它们,比较它们,找到匹配项,并找到记录的索引号,但我正在努力获取这个索引号,并使用它来获取相关的 RES 组。到目前为止,代码如下所示:

$teamlist = import-csv "\\location\Team List.csv"
$newstarter = import-csv "\\otherlocation\New Starter Form.csv"
    
[string]$teamname = Compare-Object -includeequal -excludedifferent -PassThru $newstarter.teamname $teamlist.teamname 
    
$teamname

[array]::indexof($teamlist,$teamname)

运行它,在控制台中为我们提供了这个,表明我们确实可以看到匹配,并且匹配记录是最后一个(-1):

PS C:\WINDOWS\system32> $teamlist = import-csv "\\location\Team List.csv"
$newstarter = import-csv "\\otherlocation\New Starter Form.csv"

[string]$teamname = Compare-Object -includeequal -excludedifferent -PassThru $newstarter.teamname $teamlist.teamname 

$teamname

[array]::indexof($teamlist,$teamname)

Security Administration
-1

我对Powershell没有太多经验,我的编码知识总体上很有限,但是我习惯了我可以将索引值保存为变量,然后我可以调用该变量的概念回来做$teamlist.resgroup[VARIABLE HERE]之类的事情。 但是如果我尝试在[array]::indexof($teamlist,$teamname) 之前声明一个新变量,Powershell 会不高兴。

虽然我没有研究过,但我相信一个可能的替代方法是添加一个巨大的 switch 语句,但我可能会考虑拥有 100 多个团队,并且我想在任何地方避免低效的代码能够。我错过了一些明显的东西吗?有没有更好的方法(或者甚至只是一种功能性的方法会很棒!)这可以工作?

您能提供的任何帮助将不胜感激!

【问题讨论】:

    标签: arrays powershell csv


    【解决方案1】:
    $teamlist = import-csv "\\location\Team List.csv"
    $newstarter = import-csv "\\otherlocation\New Starter Form.csv"
    
     # get a single new starter
    $person = $newstarter | Where-Object { $_.firstname -eq 'Joe' -and $_.lastname -eq 'Bloggs' }
    
    # get the new starters team
    $team = $teamlist | Where-Object { $_.teamname -eq $person.teamname }
    
    # get the new starters resource group
    $resgroup = $team.resgroup
    
    # use the resource group - this simply writes it to the console
    Write-Host $resgroup
    

    上面的代码将:

    • 导入你的两个 csvs
    • 从新启动器 csv 中获取一个新启动器,基于第一个 & 姓氏
    • 从团队列表中获取该新入门者的团队和资源组
    • 显示 resgroup(这是您需要用来填充 AD 的地方)

    【讨论】:

    • 这要简单得多,而且效果很好,非常感谢!
    • 没问题。很高兴帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2020-08-24
    • 1970-01-01
    • 2015-06-15
    • 2021-05-13
    相关资源
    最近更新 更多