我有一个问题,我正在努力解决,但似乎无法找出关键部分。我们每天使用.jar文件处理大量记录,但问题是我们必须逐个进行,这很费时间。我想如果我们使用powershell脚本,我们可以节省大量时间。
问题是我不知道如何将参数从csv传递给powershell中的函数。
我的csv看起来像这样
NAME,ID
-------
John,18
Dave,19
Carmen,20
Eric,21
Tom,22
Lisa,23
Kyle,24
功能是
function CreateUser
& java -jar --create -user $name -id $id -file D:/HR/$name-$id-form.pdf
我使用
导入了csv文件$dataCSV = "D:\HR\Input\20150303NewUsers.csv"
$data = Import-Csv $dataCSV
所以我需要一些系统性的文件,并将csv中的name字段作为$ name传递,将ID字段作为$ id反复传递直到完成。但我无法弄清楚如何将这两个传递给ForEach-Object方法:(
我被困了......我整个周末一直在打这个,但没有。
非常感谢任何帮助或指导!或者如果有人知道如何在python中这样做,那也会很酷! :)
答案 0 :(得分:1)
不确定是否拼写错误,但您的D:\...
需要用引号括起来,您还没有将其关闭。
一旦$data
保留导入值列表,只需执行foreach ($item in $data) {do something}
$item
是您想要的任何单词(变量),它只是指CSV中的每一行。
因此...
$data = Import-Csv "D:\importfile.csv"
foreach( $item in $data )
{
# Do-whatever
}
答案 1 :(得分:1)
我编写了一个逐步执行表格(从csv文件导入)的工具,并为表格中的每一行生成模板扩展。我要做的一件事是将行中的每个值复制到与列名称相同的powershell变量。这可能会对你有帮助。
这是我写的工具:
<# This scriptlet is a table driven template tool.
It's a refinement of an earlier attempt.
It generates an output file from a template and
a driver table. The template file contains plain
text and embedded variables. The driver table has
one column for each variable, and one row for each
expansion to be generated.
2/15/2015
#>
param ($driver, $template, $out);
$OFS = "`r`n"
$list = Import-Csv $driver
[string]$pattern = Get-Content $template
Clear-Content $out -ErrorAction SilentlyContinue
foreach ($item in $list) {
foreach ($key in $item.psobject.properties) {
Set-variable -name $key.name -value $key.value
}
$ExecutionContext.InvokeCommand.ExpandString($pattern) >> $out
}
您可能感兴趣的部分是内在循环,我在其中执行将列名与实际值匹配的Set-Variable。