powershell - 将 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。
任何帮助将不胜感激
解决方案
您最初可以假定未找到服务器(变量$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
}
推荐阅读
- git - 在 git 中查找提交文件的特定组合
- ubuntu-18.04 - Ubuntu 18.04 LTS-如何使用特定版本设置 default-jre?
- azure-data-factory-2 - Azure 数据工厂 V2 中的 Parquet 小数问题
- angular - 如何避免对默认“应该创建”方法的 api 调用
- c# - ASP.Net.Core userManager.CreateAsync
- javascript - 将 @Input() 对象属性分配给组件
- c# - 为什么从 ASP.NET Core Web API 的 ControllerBase 与 Controller 派生?
- python - 赋值前引用的局部变量“sql”
- javascript - 在二维数组中查找最短路径(Javascript)
- video - Adobe After Effects 文件大小