首页 > 解决方案 > 将 For 循环中的变量存储到数组中

问题描述

我目前在多个文件中搜索的代码以在文件中查找特定的服务器名称。它还将它是否找到服务器输出到一个文本文件,无论是通过还是失败。下面的代码显示了这一点,但它在每个循环中写入文件,因此如果它在第三个文件中,它将写入“失败失败通过”。

$Server = "ServerName"
For ($AddDays = -2; $AddDays -lt 1; $AddDays++){
    $DatePrev = (Get-Date).AddDays($AddDays).ToString('yyyy_MM_dd')
    write-host $DatePrev 
    $FilePath = "C:\Users\Desktop\SaScripts\$DatePrev.tsv"
    if([bool]((import-csv $FilePath -Delimiter "`t") -match $Server)) {
        "Pass" | Out-File -FilePath "C:\Users\Desktop\SaScripts\$Server.txt" -Append -NoNewline
        }
        else{
        "Fail" | Out-File -FilePath "C:\Users\Desktop\SaScripts\$Server.txt" -Append -NoNewline
        } 
}

如果说服务器名称在第三个文件中,上面的代码将输出以下内容:

fail fail pass

我需要它只向文本文件写入一次通过或失败,所以如果它在任何文件中找到服务器名称,或者如果它没有。我能想到的唯一方法是将每个循环的结果存储到一个数组中,然后查看是否有任何值的 Pass。

任何帮助将不胜感激

标签: powershell

解决方案


您最初可以假定未找到服务器(变量$Found)。如果找到它,只需将变量更新为$true. 最后,只显示一次基于该变量的结果。

$Server = "ServerName"
$Found = $false
For ($AddDays = -2; $AddDays -lt 1; $AddDays++){
    $DatePrev = (Get-Date).AddDays($AddDays).ToString('yyyy_MM_dd')
    write-host $DatePrev 
    $FilePath = "C:\Users\Desktop\SaScripts\$DatePrev.tsv"
    if([bool]((import-csv $FilePath -Delimiter "`t") -match $Server)) {
        $Found = $true
    }
}
if ($Found) {
    "Pass" | Out-File -FilePath "C:\Users\Desktop\SaScripts\$Server.txt" -Append -NoNewline
} else {
    "Fail" | Out-File -FilePath "C:\Users\Desktop\SaScripts\$Server.txt" -Append -NoNewline
}

推荐阅读