用于从.csv文件读取2列数据的Powershell脚本
我正在尝试编写PowerShell脚本以获取csv文件的2列:用于从.csv文件读取2列数据的Powershell脚本,powershell,Powershell,我正在尝试编写PowerShell脚本以获取csv文件的2列: ProductName ProductCode ----------------------------------------------------------- Java 7 Update 67 {26374892-xxxx-xxxx-xxxx-123456789012} Java 8 Update 25 {26374892-xxxx-xxxx-xxxx-902341562789} 我只想获
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 }
这样,您将在多个空格上拆分字符串后获得最后一个对象
注:如果需要跳过标题,可以在获取内容后添加|选择对象-跳过1
pps。如果导入csv允许在分隔符中使用regex,那么导入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:\folder\java.txt
这将为您提供如下文件:
{26374892-xxxx-xxxx-xxxx-123456789012}
{26374892-xxxx-xxxx-xxxx-902341562789}
{26374892-xxxx-xxxx-xxxx-123456789012}
{26374892-xxxx-xxxx-xxxx-902341562789}
我尝试了下面的方法$code1=Get Contect%path%| Foreach对象{$$-拆分'\s+'|选择对象-跳过1 |选择对象-最后1}Foreach($code1中的代码){写主机$code}我在输出67,{232424-55567-8879-xxxxxxx}25,{3243566456-5674-xxxxx-xxxxxx}但是我只想要像{324545453454-56656757-xxxxx}这样的产品代码,对不起,我不明白。查看您的输入,我找不到67、
或25、
,因此您提供了错误的输入示例,或者我不理解一些错误的输入抱歉。在ProductName专栏中的.csv文件中,我提到了Java 7 Update 67和Java 8 Update 25。您可以看到我刚刚编辑的问题中的相同内容。奇怪,我复制\粘贴了您的行到我的powershell中,并获得了正确的结果我已创建了新的.csv文件,该文件正常工作,但输出也带有标题名。如果我删除了ProductName和Product的标题,我将获得正确的输出。尽管这些标题不是必需的。如果你有办法不获取标题名,我会很有帮助。我尝试了下面的方法$code1=Get Contect%path%| Foreach对象{$|-split'\s+'| Select对象-skip 1 | Select对象-Last 1}Foreach($code1中的代码){write host$code}我在输出67、{232424-55567-8879-xxxxxxx}25、{32435656-5674-xxxxxx}但我只想要输出产品代码,如{3245345-3454-56656757-xxxxx}请将其添加到您的问题中以提高可读性上述代码对我来说是正确的(除了您需要在foreach
之前使用;选择对象-跳过1
)。您确定问题中提供的格式与文件中的格式完全相同吗?请尝试在记事本+++
中打开它,并使用视图>显示符号>显示所有字符
(或使用任何其他程序检查文件中的字符)。