Powershell脚本从.csv文件读取2列数据

时间:2018-07-03 09:52:31

标签: powershell

我正在尝试编写PowerShell脚本以获取csv文件的2列:

ProductName          ProductCode
-----------------------------------------------------------
Java 7 Update 67     {26374892-xxxx-xxxx-xxxx-123456789012}
Java 8  Update 25    {26374892-xxxx-xxxx-xxxx-902341562789}

我只想获取ProductCode列值以在foreach循环中使用。

我尝试了以下方式

$code1 = Get-Contect %path% | Foreach-Object {
    $_ -split '\s+' | Select-object -skip 1 | Select-Object -Last 1
} 

foreach($code in $code1){ write-host $code } 

我的输出低于

67,{232424-55567-8879-xxxxxxx} 
25,{324356456-5674-xxxx-xxxxxx}

但是我只想输出

之类的产品代码
{3245345345-3454-56656757-xxxxx}

2 个答案:

答案 0 :(得分:1)

这看起来不太像CSV。我会说,最简单的方法是这样的:

Get-Content %path% | Foreach-Object { $_ -split '\s+' | Select-Object -Last 1 }

这样,在多个空格上分割字符串后,您将获得最后一个对象

ps。如果您需要跳过标题,则可以在get-content之后添加| Select-Object -Skip 1
pps。如果import-csv在delimiter中允许使用正则表达式,则import csv会更易于使用,但我怀疑它是否允许这样做。 ppps。为我工作:

> cat .\Untitled-2.txt
ProductName ProductCode
Java 7 Update 67     {26374892-xxxx-xxxx-xxxx-123456789012}
Java 8  Update 25    {26374892-xxxx-xxxx-xxxx-902341562789}
> Get-Content .\Untitled-2.txt | select-object -skip 1 | Foreach-Object { $_ -split '\s+' | Select-Object -Last 1 }
{26374892-xxxx-xxxx-xxxx-123456789012}
{26374892-xxxx-xxxx-xxxx-902341562789}

答案 1 :(得分:0)

您可能想看看如何获​​取这些信息,因为从源头过滤所需信息可能会更容易...

以Java为例,但是该过程可以处理任何事情:

$java = Get-WMIObject Win32_Product | Where-Object { $_.Name -Like "java*" }

$java将包含有关匹配安装的信息,然后您只需选择所需的属性并将其保存到文件中即可。

$java | Select-Object -ExpandProperty IdentifyingNumber | Out-File C:\folder\java.txt

哪个会给您一个文件,如:

{26374892-xxxx-xxxx-xxxx-123456789012}
{26374892-xxxx-xxxx-xxxx-902341562789}