foreach循环上的PowerShell + =添加重复的实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了foreach循环上的PowerShell + =添加重复的实例相关的知识,希望对你有一定的参考价值。
我正在对一个由CSV填充的数组使用foreach循环。 CSV包含产品名称,当前支持状态以及支持开始时的版本号的行。有时出于各种原因,这些支持版本以逗号分隔。
当在一行中找到逗号分隔的版本时,该行将从数组中删除。然后创建一个新行,并将其添加到找到的每个版本的数组中。
我遇到的问题是,如果我的版本为“ 7,8,9”,我最终会列出所有列出版本9的三行。对该脚本进行故障排除表明,这些值已被正确拆分和拾取,但是数组似乎正在用最新的值更新每个值。例如,第一遍将创建版本7,第二遍具有两个v8实例,最后一遍以v9结束3次。
如何使+ =运算符不更新现有行?
foreach($ sheet中的$ line)if($ line.'Support Started'-cmatch“,”)$ sheet = $ sheet -ne $ line$ line.'Support Started'.Split(“,”)|每次$ subver = $ _$ line.'Support Started'= $ subver$ sheet = $ sheet + =($ line)
如果要使用以下内容,请提供更多信息:
写主机$ line$ sheet + = $ line写主机$ line
在版本为7,8,9的文件上,我得到以下输出:
产品1,支持,7产品1,支持,7产品1,支持,8产品1,支持,8产品1,支持,9产品1,支持,9
[检查$ sheet的值时,我得到:
产品1,支持,9产品1,支持,9产品1,支持,9
确定您没有使用Import-Csv读取文件吗?
您遇到问题的原因是,当您这样做时>
foreach ($line in $sheet) ...
然后,变量$ line不是$ sheet中该行的副本,而是对sheet变量中该行的引用。即当您更改$ line时,实际上是在更改$ sheet。
我将尝试在操作数据时不更改$ sheet,而是创建一个可以容纳所有数据的新数组。像这样的东西:
$sheet = Import-Csv data.csv
$newsheet = @()
foreach ($line in $sheet)
if ($line.'Support Started' -cmatch ",")
$a = $line.'Support Started'.Split(",")
ForEach ($subver in $a)
$line2 = $line.PSObject.Copy()
$line2.'Support Started' = $subver
$newsheet += $line2
else
$newsheet += $line
$sheet = $sheet += ($line)
未测试:
您的电话
从文本文件读取时,我遇到了foreach与write-host复制输出的问题,该问题已归结为正被读取的文件中的行返回,这被视为foreach针对其输出写入主机的有效条目
以上是关于foreach循环上的PowerShell + =添加重复的实例的主要内容,如果未能解决你的问题,请参考以下文章
$Files 中的 PowerShell ForEach $file
PowerShell foreach()基于第一个元素的多维数组