Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Powershell从.Csv文件中获取一行信息?_Powershell_Csv - Fatal编程技术网

如何使用Powershell从.Csv文件中获取一行信息?

如何使用Powershell从.Csv文件中获取一行信息?,powershell,csv,Powershell,Csv,powershell脚本: $test = import-csv “C:\CSVFiles\test.csv” ForEach ($item in $test) { $Name = $item.(“Name”) $property = $item.("property") $location = $item.(“location”) Write-Output "$Name=$Name" Write-Output "Property=$property" Write-Output "Locat

powershell脚本:

$test = import-csv “C:\CSVFiles\test.csv”
ForEach ($item in $test)
{
$Name = $item.(“Name”) 
$property = $item.("property")
$location = $item.(“location”)

Write-Output "$Name=$Name"
Write-Output "Property=$property"
Write-Output "Location=$location"
}
此脚本显示每行的名称、属性和位置的所有数据。我希望结果只显示一行的数据;例如,行:n1;13;计算机

Cvs文件=

Name;property;location
n1;13;computer
n2;65;computer
n3;12;tablet
n4;234;phone
n5;123;phone
n6;125;phone
当前脚本显示的内容:

Name=n1
Property=13
Location=computer
Name=n2
Property=65
Location=computer
Name= n3
Property=12
Location=tablet
Name=n4
Property=234
Location=phone
Name=n5
Property=123
Location=phone
Name=n6
Property=125
Location=phone

因此,您当前的输出有3个对象,它们主要有3个标题。 一是姓名;第二个是财产,第三个是位置

作为解决方案的一部分,您可以通过指定索引值来提取记录,也可以使用.Headername提取相同对象的所有集合。比如:

避免使用Foreach和使用
$test[0]
$test[1]


或者您可以直接使用:
$test.Name
来获取csv中的所有名称

有许多方法可以选择csv中的一行并显示数据

为了演示,我使用带here字符串的内联csv

$Test = @"
Name;property;location
n1;13;computer
n2;65;computer
n3;12;tablet
n4;234;phone
n5;123;phone
n6;125;phone
"@ | ConvertFrom-Csv -delimiter ';'




导入csv行后,内容将转换为对象

如果要获取符合条件的csv原始行,请不要导入,但:

> Get-Content "C:\CSVFiles\test.csv" | Select-String '^n1'

n1;13;computer
^n1
是一个正则表达式,将模式固定在行开始处

Select-String -Path "C:\CSVFiles\test.csv" -Pattern '^n1'

没有管道也一样

那么,不要使用
ForEach
。使用
$test[0]
或任何您需要的索引。是否列出基于属性值的第x个条目或筛选器?此外,您可以跳过为变量赋值,并使用
Write Output“Name=$($item.Name)”
@Lieven抱歉,我没有注意到您的评论,我是这里的新手:)。我不知道在脚本中将$test[0]放在哪里?我试着把它放在ForEach的位置上。@Mark-LotPings的回答相当全面。比我能在评论里说的要好。好的,拉纳迪普,非常感谢你的回答!如果第一行(n1;13;计算机)只需要“name”和“property”的值,您将如何在此处使用“$test[0]或$test[1]”选项?只需使用此选项:$test[0]|选择name,property
> $test | where-object Name -eq 'n1' | Select-Object Name,property

Name property
---- --------
n1   13
> $test | where-object Name -eq 'n1' | ForEach-Object {"Name:{0} has property: {1}" -f $_.Name,$_.property}
Name:n1 has property: 13
> Get-Content "C:\CSVFiles\test.csv" | Select-String '^n1'

n1;13;computer
Select-String -Path "C:\CSVFiles\test.csv" -Pattern '^n1'