所以这就是我想要完成的事情。
我有一个新的启动器表单,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多个团队,我想避免尽可能低效的代码。我错过了一些明显的东西吗?有没有更好的方法(或者甚至只是一种有效的方式会很棒!)这可行吗?
非常感谢您提供的任何帮助!
答案 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
上面的代码将: