我有三个变量,每个变量都从各自的文件中获取内容。这三个变量位于一个数组中(称为$ 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
答案 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 }
}
}