Powershell:比较两个数组之间的值,并提取相关值

时间:2017-03-09 13:47:32

标签: arrays powershell csv

所以这就是我想要完成的事情。

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

  

名字,姓氏,teamname,开始日期

     

Joe,Bloggs,安全管理员,01/01/18

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

  

teamlead,teamname,resgroup

     

A B,Marketing,RESMARKETING01G

     

C D,产品,RESPRODUCT01G

     

E F,广告,RESADVERTISING01G

     

G H,安全管理员,RESSECURITYADMIN01G

我想将两个CSV文件导入Powershell,运行一个comparisson,从新的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并不高兴。

虽然我没有调查过,但我相信一个可能的选择可能是添加一个巨大的转换声明,但我可能会考虑总共有100多个团队,我想避免尽可能低效的代码。我错过了一些明显的东西吗?有没有更好的方法(或者甚至只是一种有效的方式会很棒!)这可行吗?

非常感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分: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
  • 根据第一个&amp ;;从你的新入门csv中获取一个新的启动器 姓氏
  • 抓住团队&来自团队列表的新入门者的资源组
  • 显示resgroup(这是您需要用来填充AD的地方)