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

ivqmmu1c  于 2023-06-27  发布在  Shell
关注(0)|答案(3)|浏览(84)

我有一个问题,我试图解决,但似乎不能找出关键部分。我们每天使用. 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

我使用

$dataCSV = "D:\HR\Input\20150303NewUsers.csv"
$data = Import-Csv $dataCSV

因此,我需要一些东西,将系统地向下的文件,并通过名称字段内的csv作为$名称和ID字段作为$id一遍又一遍,直到完成。但是我不知道如何在ForEach-Object方法上传递这两个:(
我被卡住了...我整个周末都在挣扎,但一无所获。
任何帮助或指导都将不胜感激!或者如果有人知道如何在Python中做到这一点,那也会很酷!:)

3pvhb19x

3pvhb19x1#

我编写了一个工具,它可以遍历一个表(从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,它将列名与实际值匹配。

dojqjjoe

dojqjjoe2#

不确定是否是打字错误,但是你的D:\...需要用引号括起来,你还没有关闭它。
一旦$data保存了导入值的列表,只需执行foreach ($item in $data) {do something}
其中$item是您想要的任何单词(变量),它只是引用CSV中的每行。
所以...

$data = Import-Csv "D:\importfile.csv"
foreach( $item in $data )
{
    # Do-whatever
}
xlpyo6sf

xlpyo6sf3#

此脚本将提取Name标题下的值,并将它们放置在$name变量中。然后,它会将这些值放在ID头下面,并将它们放在$id变量中。

$data = import-csv -path 'D:\HR\Input\20150303NewUsers.csv'

foreach($item in $data)
{
    $name = $item.Name
    $id = $item.ID 
}

相关问题