我正在尝试编写一个PowerShell脚本来获取csv文件的2列:
ProductName ProductCode
-----------------------------------------------------------
Java 7 Update 67 {26374892-xxxx-xxxx-xxxx-123456789012}
Java 8 Update 25 {26374892-xxxx-xxxx-xxxx-902341562789}
我只想获取要在 foreach 循环中使用的ProductCode
列值。
我尝试了以下方式
$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}
这看起来不像CSV。我会说最简单的方法是这样的:
Get-Content %path% | Foreach-Object { $_ -split 's+' | Select-Object -Last 1 }
这样,您将在多个空格上拆分字符串后获得最后一个对象
如果您需要跳过标题,您可以在获取内容
PPS 后添加| Select-Object -Skip 1
。 如果 import-csv 允许delimiter
中的正则表达式,导入 CSV 会更容易使用,但我怀疑它允许这样做。 购买力平价。为我工作:
> 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}
您可能想看看您是如何获得这些信息的,因为从源头过滤您想要的信息可能会更容易......
以java为例,但该过程可以处理任何内容:
$java = Get-WMIObject Win32_Product | Where-Object { $_.Name -Like "java*" }
然后$java
将包含有关匹配安装的信息,您只需选择所需的属性并将其保存到文件中:
$java | Select-Object -ExpandProperty IdentifyingNumber | Out-File C:folderjava.txt
这将为您提供一个文件,例如:
{26374892-xxxx-xxxx-xxxx-123456789012} {26374892-xxxx-xx-xxxx-902341562789}