使用powershell从CSV文件中提取每个对象

时间:2019-06-14 19:04:00

标签: powershell csv

我是Powershell的新手。我有一个名为samplemap.csv的csv文件,其中包含values。我必须从文件中读取每个值,例如用于定义paris_App值的变量。

CntryApp Version
paris_App 2.19
ila_App 5.3
sga_App 3.10

我使用的代码是打印所有CntryApp版本,而不是分别打印每个CntryApp版本

Import-CSV "H:\samplemap.csv"
$CntryApp = @()
$Version = @()
 Import-CSV "H:\samplemap.csv" -Delimiter ';'
ForEach-Object {
        $CntryApp += $_.CntryApp
        $Version += $_.Version
}

预期将2.19、5.3、3.10分配给单个变量。我的意思是每个CntryApp版本都要分配给一个变量。

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您需要输入文件中每个条目的单独变量,例如$paris_App?尽管可以使用Set-Variable之类的方法来实现,但是更好的方法是创建这些键值对的哈希表。如果知道名称,则可以调用该版本。

$apps = @{}
Import-CSV "H:\samplemap.csv" -Delimiter ';' | ForEach-Object{
    $apps[$_.CntryApp] = $_.Version
}

$apps['sga_app']

如果这些CntryApp包含重复项,则此方法将失败。

答案 1 :(得分:0)

要从.csv文件(在这种情况下用空格分隔)导入数据,您必须指定分隔符(除非它与可能取决于您的区域设置的默认分隔符匹配,并且我很确定空间是不是默认值)。

如果以后要使用该数据,最好将导入的值保存到变量中:

$t = Import-CSV "$($pwd.path)\samplemap.csv" -Delimiter ' '

保存后,可以使用以下结构进行访问

# All values of CntryApp
$t.CntryApp

# Output
paris_App
ila_App
sga_App

# CntryApp and version of first object
$t[0]

# Output
CntryApp  Version
--------  -------
paris_App 2.19

# Version of first app
$t[0].Version

# Output 
2.19

正如您提到的key:value方案一样,将hastable视为@Matt suggested是很自然的(尽管看起来可能更复杂)。