2017-01-30 30 views
1

我試圖解決的具體問題是使用Powercli導出的虛擬機及其主機的列表,但我認爲這是一個可能存在的問題更普遍地詢問任何列表的PowerShell對象。Powershell:將列表中的對象與同一列表中的其他對象進行比較

我有一個對象及其屬性的列表。我想將該列表中的每個對象與該列表中的所有其他對象進行比較,並查看哪些虛擬機具有該屬性的共同點。

$vms = Get-VM | Where-Object {$_.Name -like '*vma*'} | Select Name, VMHost 

有一個比較簡單的方法,然後遍歷列表和每個對象比較在該列表中的每個其他物體,看看哪些對象具有相同的「VMHOST」屬性?我發現的大多數問題都是關於比較兩個對象數組的,但我不確定這有幫助。

最終目標是生成一份報告,其中突出顯示名稱與特定字符串匹配並共享主機的虛擬機,以便可以手動檢查並根據需要移動到其他主機。

+2

'| | Group-Object -property VMHost'? – 4c74356b41

+0

是的,羣組對象最終成爲實現此目的的最佳方式。 – Coxswain

回答

2

牢記最終目標,我結束了以下內容:

$vms = Get-VM | Where-Object {$_.Name -like '*vma*'} | Select Name, VMHost 
$groupedvms = $vms | Group-Object -Property VMHost 

然後我用了$ X .Count之間的變量來確定虛擬機共享一臺主機。我通過檢查由Group-Object命令創建的組是否具有多個分配給它們的對象(如果計數大於1)並基於此生成輸出來完成此操作。

foreach ($vmgroup in $groupedvms) { 
    if ($vmgroup.count -ne 1) { [...] } 
    else { [...] } 
} 

這讓我生成我需要的報告。有可能有更好的方法來做到這一點,但這對我所需要的很好(一個快速而骯髒的電子郵件報告每天運行並在需要時進行分類)。

2

here

$b = $a | select –unique 

Compare-object –referenceobject $b –differenceobject $a 

選擇唯一對象,然後比較,要完整列表,以便您可以檢查什麼不能複製。

相關問題