Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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
用于从.csv文件读取2列数据的Powershell脚本_Powershell - Fatal编程技术网

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

用于从.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} 我只想获

我正在尝试编写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 }
这样,您将在多个空格上拆分字符串后获得最后一个对象

注:如果需要跳过标题,可以在获取内容后添加
|选择对象-跳过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
)。您确定问题中提供的格式与文件中的格式完全相同吗?请尝试在记事本+++
中打开它,并使用
视图>显示符号>显示所有字符
(或使用任何其他程序检查文件中的字符)。