嗨,我需要一些帮助让这个工作:)我有一份名单,里面有名字。文件a .
SomeNameA
SomeNameB
SomeNameC
etc
现在我需要从FILE B中获取一组行:
ddrObjId_1=SomeNameA
adrrObjType_1=8
adrrObjZone_1=ZONE_A
addrObjIP_1=0.0.0.0
addrObjIP2_1=0.0.0.0
addrObjId_2=SomeNameB
adrrObjType_2=8
adrrObjZone_2=ZONE_B
addrObjIP_2=0.0.0.0
addrObjIP2_2=0.0.0.0
从值与FILE a中的一个名称匹配的行开始,以及所有后续行,直到找到另一个匹配的文件末尾。希望这能更好地解释:)
所以当我完成后,我需要一个新的FILE C来生成数据:
address-object SomeNameA
type 1
host 0.0.0.0
mask 0.0.0.0
zone ZONE_A
address-object SomeNameB
type 8
host 0.0.0.0
mask 0.0.0.0
zone ZONE_B
etc
所以我一直在尝试一些不同的脚本在StackO上找到她,我现在可以从我的文件中扫描一个单词的文件,它得到数据,所以我需要它来获取值,然后创建一个新的文件,其中包含命令。等。这里是代码不工作,但这是一个开始。希望有人能给我解释一下……
Clear-Host
$array = @('SomeNameA')
$found = @{}
Get-Content 'D:ScriptsFileB.txt'| % {
$line = $_
foreach ($item in $array) {
if ($line.Split('=')[1] -like $item) { $found[$item] = $true }
foreach ($item in $line | Where-Object{$_ -like 'addrObjId_*=*' -or $_ -like 'addrObjType_*=*'}) {
write-host $item
}
}
}
$found.Keys | Out-File "C:results.txt"
这应该可以完成工作:
$names = cat '.fileA.txt'
$data = cat '.fileB.txt'
$outfile = '.fileC.txt'
rm -Force $outfile
foreach($d in ([string]$data -split 'addrObjId_d+='))
{
if ($d -eq "") { continue }
$d = $d -split ' '
$obj = $d[0].Trim()
$type = ($d[1] -split "=")[1]
$zone = ($d[2] -split "=")[1]
$hostip = ($d[3] -split "=")[1]
$maskip = ($d[4] -split "=")[1]
if ($names.Contains($obj))
{
"address-object $obj" | Out-File -Append -FilePath $outfile
"type $type" | Out-File -Append -FilePath $outfile
"host $hostip" | Out-File -Append -FilePath $outfile
"mask $maskip" | Out-File -Append -FilePath $outfile
"zone $zone" | Out-File -Append -FilePath $outfile
}
}
这是我最后使用的代码:)Thx
metix
Clear-Host
$names = cat 'FileA.txt'
$data = cat 'FileB.txt'
$outfile = 'C:Tempoutput.txt'
if(test-path $outfile){Remove-Item $outfile}
foreach($d in ([string]$data -split 'addrObjId_d+='))
{
if ($d -eq "") { continue }
$d = $d -split ' '
$obj = $d[0].Trim()
$type = ($d[2] -split "=")[1]
$zone = ($d[3] -split "=")[1]
$hostip1 = ($d[5] -split "=")[1]
$hostip2 = ($d[6] -split "=")[1]
if ($names.Contains($obj))
{
"address-object ipv4 $obj" | Out-File -Append -FilePath $outfile
if ($type -eq '4'){"network $hostip1 $hostip2" | Out-File -Append -FilePath $outfile}elseif($type -eq '1'){"host $hostip1" | Out-File -Append -FilePath $outfile}elseif($type -eq '2'){"range $hostip1 $hostip2" | Out-File -Append -FilePath $outfile}
"zone $zone" | Out-File -Append -FilePath $outfile
}
}