我有此PowerShell代码,用于在NewData和CompareData数据相同,端口处于非活动状态时比较跨交换机的数据流。如果不同,则处于活动状态。它用于每月的消息。我对循环的输出有疑问。我想将所有段落存储到一个变量中,然后将其导出为HTML。
for ($i=0; $i -lt $NewData.Length; $i++){
if($NewData[$i] -eq $CompareData[$i]){
$n = $i
$n++
Write-Host "Port $n Unactive" -ForegroundColor Yellow
}
elseif($NovaData[$i] -ne $SrovavaciData[$i]){
$a = $i
$a++
Write-Host "Port $a Active" -ForegroundColor Green
}
}
这是我需要进入变量的输出。到目前为止,我只能保存最后一个项目。
Port 2 Unactive
Port 7 Unactive
Port 8 Unactive
Port 12 Unactive
Port 13 Unactive
Port 14 Unactive
Port 15 Unactive
Port 18 Unactive
Port 21 Unactive
Port 23 Unactive
Port 25 Unactive
Port 26 Unactive
Port 29 Unactive
Port 30 Unactive
Port 33 Unactive
Port 36 Unactive
Port 38 Unactive
Port 46 Unactive
Port 47 Unactive
感谢答案。
答案 0 :(得分:0)
您只需将要写入的每一行存储到数组中即可。
$informations = @()
for ($i=0; $i -lt $NewData.Length; $i++) {
if($NewData[$i] -eq $CompareData[$i]) {
$message = "Port $($i +1) Unactive"
Write-Host $Message -ForegroundColor Yellow
elseif($NovaData[$i] -ne $SrovavaciData[$i]) {
$message = "Port $($i +1) Active"
Write-Host $Message -ForegroundColor Yellow
}
$informations += $message
}
一种更好的方式是将两个值都存储在哈希列表中,然后将整个内容导出到html,如下所示:
$informations = @{}
for ($i=0; $i -lt $NewData.Length; $i++) {
if($NewData[$i] -eq $CompareData[$i]) {
$informations += @{"Port $($i +1)"="Unactive}
elseif($NovaData[$i] -ne $SrovavaciData[$i]) {
$informations += @{"Port $($i +1)"="Active}
}
}
New-Object psobject -Property $informations | ConvertTo-Html -Fragment | Out-File .\port-report.html
这将根据html文件中的所有结果生成一个表格。
答案 1 :(得分:0)
将所有内容存储在数组中
$output = @()
for ($i=0; $i -lt $NewData.Length; $i++){
if($NewData[$i] -eq $CompareData[$i]){
$n = $i
$n++
$output += "Port $n Unactive"
}
elseif($NovaData[$i] -ne $SrovavaciData[$i]){
$a = $i
$a++
$output += "Port $a Active"
}
}
$output
侧面说明:如果数组列表中要存储很多项目,则使用+ =添加新元素的速度很慢,因为每次添加元素时,整个数组都会被复制并添加新项。