Arrays Powershell |组合多个数组并将它们与一个表进行比较

Arrays Powershell |组合多个数组并将它们与一个表进行比较,arrays,excel,powershell,dns,Arrays,Excel,Powershell,Dns,我遇到了一个新问题,我甚至不知道从哪里开始解释。我会尽我最大的努力,如果有什么不清楚的请问我 我有一个Excel工作簿,其中包含有关DNS记录的信息(多行)-非常类似于powershell DNS语法。e、 g: HostName RecordType TimeStamp TimeToLive RecordData @ A 0 00:05:00 127.0.0.1 我用下面的小代码将它们读作数组

我遇到了一个新问题,我甚至不知道从哪里开始解释。我会尽我最大的努力,如果有什么不清楚的请问我

我有一个Excel工作簿,其中包含有关DNS记录的信息(多行)-非常类似于powershell DNS语法。e、 g:

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[0]将显示以下内容(例如):

但是:如果我更深入:$Records[0]。RecordData:

IPv4Address                                                        PSComputerName                                                    
-----------                                                        --------------                                                    
127.0.0.1      
所以我需要重新创建这种(上面的)层次结构来比较它们(如果我是对的话?)

我用这样的桌子试过(没用):

尝试过这样比较(不起作用):

这确实奏效了:

if ($records[0].hostname -like $table[0].hostname) {write-host "works"}
works
这并没有(我想这是我问题的根源):

我的主要目标: 检查DNS服务器上是否有Excel表中未说明的记录,并将其从DNS服务器中删除

如果你通读了所有的文字,谢谢你这么做!谢谢你的帮助。
提前谢谢

我首先从电子表格数据创建PS对象数组开始

#Read Excel
        $row = [int]2
        $DNS_Records = 
        do {
            if ($Sheet4.Cells.Item($Row,1).Text) {
              New-Object PSObject -Property @{
                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
               }
             }
           } until (!$Sheet4.Cless.Item($row,2))

那是我一直在寻找的东西。谢谢。但是您知道是否可以使用此cmdlet将Recorddata拆分为2个子对象吗?我不理解这个问题。如果您想将从Get DnsServerZone对象返回的内容与电子表格数据进行比较,我会将两者转换为csv,然后在csv字符串上使用compare object。我可以将属性RecordData拆分为两个或两个更低级别的属性吗?某种次等级。e、 g.$DNS_records[0].RecordData.ipv4Address抱歉,我花了几个小时来考虑你的想法。哪儿也去不了。对不起,这不能解决我的问题。哦,你走错方向了。您需要简化从Get-DnsServerResourceRecord返回的内容,以匹配从spreadsheed数据创建的对象,而不是使电子表格数据对象复杂化,以匹配从Get-DnsServerResourceRecord返回的内容。
#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"}
#Read Excel
        $row = [int]2
        $DNS_Records = 
        do {
            if ($Sheet4.Cells.Item($Row,1).Text) {
              New-Object PSObject -Property @{
                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
               }
             }
           } until (!$Sheet4.Cless.Item($row,2))