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()

PowerShell foreach()基于第一个元素的多维数组

powershell循环语句的例子

如何打破嵌套的foreach循环然后转到c#上的父foreach循环

Powershell表单 - 使用按钮暂停循环