2016-05-02 86 views
-2

我正在尝试创建域中所有服务器的列表,并记下正在备份哪些服务器。我使用AD服务器列表的Quest插件和备份列表的Veeam插件。数组正在创建,但我无法理解如何比较和创建最终列表。匹配来自两个不同阵列的行

# Get list of all servers in AD 

if ((Get-PSSnapin -Name Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue) -eq $null) { 
    Add-PSSnapin Quest.ActiveRoles.ADManagement 
} 
$servers = get-qadcomputer -SizeLimit 0 | where {$_.OSName -match "Server"} 

$arrAllServers = @() 

foreach ($server in $servers) { 
    $singleserver = New-Object PSObject 
    $singleserver | Add-Member -Name "Name" -Value $x.name -MemberType NoteProperty 
    $arrAllServers += $singleserver 
} 

# Get list of servers being backed up 

if ((Get-PSSnapin -Name VeeamPSSnapin -ErrorAction SilentlyContinue) -eq $null) { 
    Add-PSSnapin VeeamPSSnapin 
} 

Connect-VBRServer -Server host.foo.org -Port 9392 

$allDetails = @() 

$jobs = Get-VBRJob | ?{$_.JobType -eq "Backup"} 

# Loop through each job adding details to array 
foreach ($job in $jobs) { 
    $Object = Get-VBRJobObject -Job $job 
    $jobOptions = New-Object PSObject 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Name" -value $job.name 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Enabled" -value $job.isscheduleenabled 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Servers" -Value (@($Object.name) | Out-String).Trim() 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Backup Mode" -value $job.backuptargetoptions.algorithm 
    $repo = (Get-VBRBackupRepository | ?{$_.HostId -eq $job.TargetHostId -and $_.Path -eq $job.TargetDir}).name 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Repository" -value $repo 
    $allBackupDetails += $jobOptions 
} 
Disconnect-VBRServer 

# Now match by server name and produce some output. 

foreach ($lserver in $arrAllServers) { 
    foreach ($bserver in $allDetails) { 
     if($lserver.name -eq $bserver.servers) { 
      Write-Host $lserver.name $bserver.name 
     } 
    } 
} 
+1

你有一个小数据样本,所以我们可以看到原始的数据和预期产出之间的关系?我在这里看到'Group-Object'。 – Matt

+0

“$ arrAllServers = #TYPE System.Management.Automation.PSCustomObject 名称 SRIPRVNCTX1 SRIPRVNCTX2 SRIPRVNCTX3 FRCDC1 ITALDC01 FRCAPP SRICA srirqctx1 SRISCCM SRINT4 SRINTERC2OLD SRINTERC2 SRIFS01 SRINT5 SRIEX7CAS SRINT30 SRIEX7MBX FRCEXSERV SRIVCENT SRIADTS ECSTSTCS SRINT134 sriwatsonsam ESGServer HPVMEXC SRIDOCAPP SRIERCFS1' ...... 237项 – Randy

+0

请编辑您的问题。 –

回答

0
  1. 您创建阵列$allDetails并从中读取,但是你写的对象$allBackupDetails
  2. $bserver.servers是一个数组,所以你需要使用-contains-in
  3. $bserver.servers可能是“破”因为你的out-string -operation(为什么使用它?)
  4. $arrAllServers当你只想要servername时浪费资源。

尝试:

# Load modules 

if ((Get-PSSnapin -Name Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue) -eq $null) { 
    Add-PSSnapin Quest.ActiveRoles.ADManagement 
} 

if ((Get-PSSnapin -Name VeeamPSSnapin -ErrorAction SilentlyContinue) -eq $null) { 
    Add-PSSnapin VeeamPSSnapin 
} 

# Get list of all servers in AD 
$servers = get-qadcomputer -SizeLimit 0 | where {$_.OSName -match "Server"} | Select-Object -ExpandProperty Name 

# Get backup jobs 
Connect-VBRServer -Server host.foo.org -Port 9392 

$allBackupDetails = @() 

$jobs = Get-VBRJob | ?{$_.JobType -eq "Backup"} 

# Loop through each job adding details to array 
foreach ($job in $jobs) { 
    $Object = Get-VBRJobObject -Job $job 
    $jobOptions = New-Object PSObject 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Name" -value $job.name 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Enabled" -value $job.isscheduleenabled 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Servers" -Value @($Object.name) 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Backup Mode" -value $job.backuptargetoptions.algorithm 
    $repo = (Get-VBRBackupRepository | ?{$_.HostId -eq $job.TargetHostId -and $_.Path -eq $job.TargetDir}).name 
    $jobOptions | Add-Member -MemberType NoteProperty -Name "Repository" -value $repo 
    $allBackupDetails += $jobOptions 
} 
Disconnect-VBRServer 

# Now match by server name and produce some output. 

foreach ($server in $servers) { 
    foreach ($backupDetails in $allBackupDetails) { 
     if($backupDetails.servers -contains $server) { 
      Write-Host "$server is in $($backupDetails.name)" 
     } 
    } 
} 
相关问题