我有一个包含作业列表的文件。我需要在foreach循环中运行该文件,并且我需要在数组的第一列中查找每个值,然后检查第3列中的值,如果是N,则输出作业名。
到目前为止,我有,
$header = 1..4 | ForEach-Object { "h$_" }
$data = Get-Content F:\temp\Connect_Project\connect_jobs.txt
$data2 = "F:\temp\Connect_Project\alljobs.csv" |
Import-Csv -Delimiter ',' -Header $header
$stream = [System.IO.StreamWriter] "F:\temp\Connect_Project\jobs_to_change.txt"
foreach ( $line in $data ) {
if ( $data2.h1 -match $line ) {
if ( $data2.h3 -match 'N' ) {
$stream.WriteLine($line)
}}}
$stream.Close()
我知道这不起作用(虽然它正在删除阵列中不存在的作业)但我正在努力找出解决方法。
有人可以帮忙吗?
根据评论进行更新
我也试过
$header = 1..4 | ForEach-Object { "h$_" }
$data = Get-Content F:\temp\Connect_Project\connect_jobs.txt
$data2 = "F:\temp\Connect_Project\alljobs.csv" |
Import-Csv -Delimiter ',' -Header $header
$stream = [System.IO.StreamWriter] "F:\temp\Connect_Project\jobs_to_change.txt"
foreach ( $line in $data ) {
$state = ($data2 | Where-Object {$_.h1 -match $file} | Select-Object h3)c
$line
$state
if ( $state = 'N') {
$stream.WriteLine($line)
}}
$stream.Close()
我可以看到我匹配h1,但我得到的所有h3值不仅仅是我想要的值。
答案 0 :(得分:1)
一旦我发现它就很明显了。感谢EBGreen提供了对象提示。第二个版本工作一旦我意识到我将$ file放入比赛而不是$ line。将其更正为$ line,它正在做我想要的。
$header = 1..4 | ForEach-Object { "h$_" }
$data = Get-Content F:\temp\Connect_Project\connect_jobs.txt
$data2 = "F:\temp\Connect_Project\alljobs.csv" |
Import-Csv -Delimiter ',' -Header $header
$stream = [System.IO.StreamWriter] "F:\temp\Connect_Project\jobs_to_change.txt"
foreach ( $line in $data ) {
$state = $data2 | Where-Object {$_.h1 -match $line} | Select-Object h3
if ( $state -match 'N') {
$stream.WriteLine($line)
}}
$stream.Close()