我正在尝试编写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}
答案 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}