Powershell:如何从CSV中读取行,以及如果列包含字符串,如何将变量设置为该字符串所在列的每个标题

Powershell:如何从CSV中读取行,以及如果列包含字符串,如何将变量设置为该字符串所在列的每个标题,powershell,csv,header,Powershell,Csv,Header,让我再试一次:) 我有一个csv文件,它有一个名称和logonname列,然后还有几个其他列。为了方便起见,我给他们起了颜色的名字。每个颜色名称在该单元格中可能包含“是” 我有一个powershell脚本,一次只能对一行执行操作(一个供应商工具)。因此,它将读取Name的值并创建一个帐户,我将登录名(samAccountName)写入该用户旁边的LogonName列中 这部分脚本工作正常,使用导入csv和Foreach($csv中的行),并通过$row.logonname写入登录名 我要寻找的是

让我再试一次:)

我有一个csv文件,它有一个名称和logonname列,然后还有几个其他列。为了方便起见,我给他们起了颜色的名字。每个颜色名称在该单元格中可能包含“是”

我有一个powershell脚本,一次只能对一行执行操作(一个供应商工具)。因此,它将读取Name的值并创建一个帐户,我将登录名(samAccountName)写入该用户旁边的LogonName列中

这部分脚本工作正常,使用导入csv和Foreach($csv中的行),并通过$row.logonname写入登录名

我要寻找的是添加到我的脚本中,以便它在该用户(名称)行的任何和所有列中查找“是”,若它找到“是”,则我将发送一封包含名称LogonName和headername:Yes的邮件,其正文应如下所示:

Name: John
Blue: Yes
Green: Yes

Name: Sam
Red: Yes
姓名:约翰·史密斯
LogonName:jsmith
蓝色:是
绿色:是

我有一个输入csv文件“test.csv”,其中包含:

名称 LogonName 蓝色 红色 绿色 约翰·史密斯 对 对
下面是关于如何处理脚本的提示。请注意,我使用的是
ConvertFrom Csv
而不是
Import Csv
,但如果您正在读取Csv并将管道直接传输到
ForEach对象
,则效果相同

@'
Name,Blue,Red,Green
John,Yes,,Yes
Sam,,Yes,,
'@ | ConvertFrom-Csv | ForEach-Object{
    $_.PSObject.Properties.Where({$_.Value}).foreach({
        "{0}: {1}" -f $_.Name, $_.Value
    })|Out-String
}
输出如下所示:

Name: John
Blue: Yes
Green: Yes

Name: Sam
Red: Yes
现在,有点难说您希望输出的外观如何。如果您提供更多详细信息,我们可能会帮助您。

在嵌套循环中按名称检查每个“列”:

Import-Csv C:\scripts\test.csv |ForEach-Object {
  # Write the name (eg "John")
  Write-Host $_.Name

  foreach($color in 'Blue','Red','Green'){
    # For each color name, check if the corresponding column says "yes"
    if($_.$color -eq 'yes'){
      Write-Host "${color} = yes"
    }
  }
}

你能重新措辞你的问题吗?我不明白你想要什么。你想实现什么?不是你刚才描述的。。这是干什么用的?嗨,很抱歉让人困惑,我编辑了它,希望能让它更清楚。谢谢大家。我写了三遍这篇文章是否让大家都很烦谢谢你!我对Powershell还是个新手,正在尝试破解所有这些符号和快捷方式或psudo代码的含义,即:@is array?“{0:}:{1}是位于位置0和1的数组元素吗?我试图实现的是两件事:1)我的脚本的第一部分将从行中读取名称,然后将samAccountName写入该行的相应列(这部分完成了)2)我想然后查找“是”“在该行的任何列中,如果找到,标题名称是什么,它看起来像:John Smith Blue:Yes Green:Yes