我遇到了一个新问题,我什至不知道从哪里开始解释。我会尽我所能,如果有不清楚的地方请问我。
我有一个 Excel 工作簿,其中包含有关 DNS 记录的信息(多行) - 非常类似于 powershell DNS 语法。例如:
HostName RecordType TimeStamp TimeToLive RecordData
@ A 0 00:05:00 127.0.0.1
我使用以下小代码将它们作为数组读取 - 不是很快,但它有效!:
#Read Excel
$row = [int]2
do {
if ($Sheet4.Cells.Item($Row,1).Text) {$ZoneName += $Sheet4.Cells.Item($Row,1).Text}
$HostName += $Sheet4.Cells.Item($Row,2).Text
$RecordType += $Sheet4.Cells.Item($Row,3).Text
$TimeStamp += $Sheet4.Cells.Item($Row,4).Text
$TimeToLive += $Sheet4.Cells.Item($Row,5).Text
$RecordData += $Sheet4.Cells.Item($Row,6).Text
$row = $row + [int] 1
} until (!$Sheet4.Cless.Item($row,2))
现在我有 6 个数组,它们都包含不同数组中的信息,但都具有相同数量的行。
现在棘手的(至少对我来说!)部分:
我想将这 6 个数组填充到一些我不知道的特殊数组中,或者在某种我不知道如何创建的表中。为什么?因为我想将这些行与此代码进行比较(具体为 $Records):
$ZoneNames = (Get-DnsServerZone -ComputerName $DnsServer).zonename
$ZoneNames | foreach {$Records = (Get-DnsServerResourceRecord -ComputerName $DnsServer -ZoneName $_)}
$Records[0] 会告诉我这个(例如):
HostName RecordType Timestamp TimeToLive RecordData
-------- ---------- --------- ---------- ----------
@ A 0 00:05:00 127.0.0.1
但是:如果我更深入:$Records[0].RecordData:
IPv4Address PSComputerName
----------- --------------
127.0.0.1
所以我需要重新创建这种(上面的)层次结构来比较它们(如果我是对的?)。
我已经用这样的表尝试过(没有用):
#Create Table object
$table = New-Object system.Data.DataTable “$ExcelRecords”
#Define Columns
$col2 = New-Object system.Data.DataColumn HostName,([string])
$col3 = New-Object system.Data.DataColumn RecordType,([string])
$col4 = New-Object system.Data.DataColumn TimeStamp,([string])
$col5 = New-Object system.Data.DataColumn TimeToLive,([string])
$col6 = New-Object system.Data.DataColumn RecordData,([string])
#Add the Columns
$table.columns.add($col2)
$table.columns.add($col3)
$table.columns.add($col4)
$table.columns.add($col5)
$table.columns.add($col6)
#Create a row
$r = $table.NewRow()
#Enter data in the row
$r.HostName = $HostName[$counter]
$r.RecordType = $RecordType[$counter]
$r.TimeStamp = $TimeStamp[$counter]
$r.TimeToLive = $TimeToLive[$counter]
$r.RecordData = $RecordData[$counter]
$RecordData
#Add the row to the table
$table.Rows.Add($r)
尝试像这样比较(没有用):
if ($records[0] -like $table[0]) {write-host "works"}
这确实有效:
if ($records[0].hostname -like $table[0].hostname) {write-host "works"}
works
这没有(我想这是我问题的根源):
if ($Records[0].RecordData -like $table[0].RecordData) {write-host "works"}
我的主要目标:检查 DNS-Server 上是否有 Excel 表中未说明的记录,并将其从 DNS-Server 中删除!
如果你通读了所有的文字,谢谢你这样做!感谢每一个帮助。提前致谢!