虽然循环在另一个循环内部而不是重新读取内部循环

时间:2014-11-08 00:03:33

标签: powershell while-loop

我有2个while循环,一个在另一个循环中,迭代2个不同的数据集,我希望外部while循环的第一行数据循环遍历内部while循环中的所有行寻找匹配,如果没有,移动到外循环的第二行,再循环遍历内部while循环中的所有记录。但是,在第一个外部循环的记录循环遍历内部循环中的所有记录之后,外部循环中的第二行不会循环遍历内部循环中的记录。这就好像第一次尝试通过内部循环中的所有记录并没有将自身重置回到开头!这是我的代码 - 有人可以告诉我哪里出错了吗?

$PgConnString = "select pgName from table1"
$MsConnString = "SELECT msName FROM table2";

$PgDbConn = CreateDbConnection "Postgres";
$PgDbCmd = CreateDbCommand $PgConnString $PgDbConn;

$PgReaderOutput = $PgDbCmd.ExecuteReader();

$MsDbConn = CreateDbConnection "MSSql";
$MsDbCmd = CreateDbCommand $MsConnString $MsDbConn;

$MsReaderOutput = $MsDbCmd.ExecuteReader();

while ($PgReaderOutput.Read())
{
    $ReporterName = $PgReaderOutput.GetValue(0);

    Write-Output "Current Reporter is: $ReporterName";

    while ($MsReaderOutput.Read())
    {
        $CurrMsRec = $MsReaderOutput.GetValue(0);
        Write-Output "Current SQL record is: $CurrMsRec";

        if($CurrMsRec -eq $ReporterName)
        {
            $Match = 1
            Write-Output "Matched"
        }
        else
        {
            Write-Output "No Matched"
            $Match = 0;
        }
    }

    If($Match -eq 1)
    {
        Write-Output "The reporter: $ReporterName has not been sent an email; send them one!";
    }
}

1 个答案:

答案 0 :(得分:0)

在内部循环中,您将浏览$ MsReaderOutput.Read()返回的所有元素。当第一次完成这个内部循环时,你不会在外循环中改变任何有关$ MsReaderOutput的内容,因此下次处理它时可能不再有任何元素。

我假设您想在每个内部循环开始之前重置$ MsReaderOutput对象,因此您可以再次开始迭代它。