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