Powershell - 如何将csv字段作为参数传递

时间:2015-03-09 13:28:47

标签: python powershell csv

我有一个问题,我正在努力解决,但似乎无法找出关键部分。我们每天使用.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中这样做,那也会很酷! :)

2 个答案:

答案 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。