基于foreach循环内的数组项的IF语句

时间:2015-09-28 02:46:17

标签: arrays powershell if-statement file-get-contents

我有三个变量,每个变量都从各自的文件中获取内容。这三个变量位于一个数组中(称为$ array)。我正在运行一个foreach循环来查看数组,另一个是根据每个文本文件的每一行打印一串命令。

一切正常,但是,现在我必须添加一个if语句来写一个行,根据它来自的地址文件的位置(我对if ($_ -like '*beta3*') {write-Host "True"}行的尝试没有消失。主要思想是根据数据类型添加注释字符串 - 每个文件都是'数据类型'。

$beta1addresses = Get-Content betarun1.txt
$beta2addresses = Get-Content betarun2.txt
$beta3addresses = Get-Content betarun3.txt

$array = ($beta1addresses,$beta2addresses,$beta3addresses)

Write-Host "config this address"
foreach ($_ in $array){
foreach ($address in $_){
    Write-Host "edit ""$address"""
    Write-Host "set type fqdn"
if ($_ -like '*beta3*') {write-Host "set comment from_beta3_file"}
    Write-Host "set fqdn ""$address"""
    Write-Host "set visibility disable"
    Write-Host "next"
}}

这是当前输出的演示(可能会更好地了解我正在尝试做什么)...只缺少set comment from_beta3_file行,因为这些来自该文件:

edit "www.betaXyahoo.com"
set type fqdn
set fqdn "www.betaXyahoo.com"
set visibility disable
next
edit "www.betaXsimbrano.com"
set type fqdn
set fqdn "www.betaXsimbrano.com"
set visibility disable
next

1 个答案:

答案 0 :(得分:2)

$array并不真正关心用于引用它现在拥有的数据的变量($beta3addresses)的名称,因此除非betarun3.txt文件实际包含一行其中包含字符串“beta3”,您的if()语句将始终返回false。

有几种方法可以解决这个问题,我可能会使用哈希表(如果文件总是不变的话):

$Addresses = @{
    'beta1' = Get-Content '.\betarun1.txt'
    'beta2' = Get-Content '.\betarun2.txt'
    'beta3' = Get-Content '.\betarun3.txt'
}

Write-Host "config this address"
foreach ($Key in $Addresses.Keys){
    foreach ($address in $Addresses[$Key]){
        Write-Host "edit ""$address"""
        Write-Host "set type fqdn"
        if ($Key -eq 'beta3') {
            Write-Host "set comment from_beta3_file"
        }
        Write-Host "set fqdn ""$address"""
        Write-Host "set visibility disable"
        Write-Host "next"
    }
}

如果文件数量不同,您可以检索有关该文件的信息并改为使用该文件:

foreach($File in Get-ChildItem -Path $PWD -Filter beta*.txt){
    foreach($address in Get-Content $File.FullName){
        if($File.Name -like '*beta3*'){ # do your thing }
    }
}