Jump to content

Powershell Array Vergleichen


Direkt zur Lösung Gelöst von Refnex,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Zusammen,

 

Ich muss ein Kleines Script in Powershell erstellen das Folgendes erledigt:

Ausgangs Situation ist ein Cluster mit mehreren Nodes, Das script soll ermitteln Auf welchem Node gerade eine VM Läuft und welcher Node der Owner ist (Bevorzugter Besitzer Node ist )

Wenn ddie VM auf dem Falschen Node Läuft soll soll sie Via Live Migration verschoben werden.

 

Ich habe versuch mit Folgenden Die Situation zu ermitteln:

Die Ist situation:

$Array_VM_is = @(Get-ClusterGroup | select Name, OwnerNode)

Dies gibt mir auch schön aus Auf Welchem Node Gerade Die VMs laufen und Pumpt sie in ein Array.

 

Die Soll Situation:

$Array_VM_want =@(Get-ClusterGroup | Get-ClusterOwnerNode )

Zeigt mir dann an welcher der Owner (Bevorzugter Besitzer Node ist )

 

Wie kann ich nun am besten diese Zwei spalten, 

Array_VM_is "OwnerNode" 

mit der Spalte aus 

Array_VM_want "OwnerNodes" 

Vergleichen und mir die Falschen Maschienen ausgeben lassen ?

 

Ich habe es schon versucht mit  

forEach ($Node in $Array_VM_is) {
if ($Array_VM_want.OwnerNodes -contains $Node.OwnerNode){
echo $Node.OwnerNode
    }
}
#echo $compare

jedoch bekomme ich hier nur Die HyperV Nodes Ausgegeben im Format:

Name                 ID                    State

HyperV-Host    (Id des Node)     Up/Down

 

Das Selbe Ergebniss wenn ich versuche sie mit compare zu Vergleichen 

Compare-Object -ReferenceObject $Array_VM_is.OwnerNode -DifferenceObject $Array_VM_want.OwnerNodes

Kann mir hier jemand weiterhelfen ?

 

Gruss

 

Link zu diesem Kommentar

Hi Sorry war noch unterwegs,

 

Kannst du das etwas Spezifizieren ? 

 

Meinst du so ?

# Auslesen der Ist Situation Ausgabe Name und Host auf dem die VM derzeit läuft
$Array_VM_is = @(Get-ClusterGroup | select Name, OwnerNode)
# Auslesen des Prefferiertem Node 
$Array_VM_want =@(Get-ClusterGroup | Get-ClusterOwnerNode ) #| select OwnerNodes
$New = $Array_VM_is | Where {$Array_VM_want -NotContains $_}
$New.OwnerNodes

Dort bekomme ich Gar kein ergebniss wenn ich mir die Variable New.OwnerNodes ausgeben lasse

Lasse ich mir aber die Variable New.OwnerNode " ACHTUNG ohne S " bekomme ich das gleiche ergebniss wie vorher. 

 

Name                 ID                    State

HyperV-Host    (Id des Node)     Up/Down

 

Hierzu sei auch gesagt das bei den Beiden Abfragen in zu den VM und den Hosts die Parameter bei den VM´s in (wo sie Momentan laufen ) als OwnerNode ( ohne s ) angegeben werden und bei der Abfrage Wo sie laufen sollten der Node als OwnerNodes ( mit s ) angegeben wird.

 

Bin echt a bissal ratlos

bearbeitet von Refnex
Link zu diesem Kommentar

Schau mal bitte, ob Dir das hier weiterhilft:

$Wanted = Get-ClusterGroup | Get-ClusterOwnerNode
$Is = Get-ClusterGroup | select Name, OwnerNode

Foreach($w in $Wanted){
    Foreach($i in $Is){
        If($w.ClusterObject -eq $i.Name){
            $Result = [PSCustomObject] @{
                'Name' = $i.Name
                'OwnerNodes' = $w.OwnerNodes
                'OwnerNode' = $i.OwnerNode
            }
        }
    }
    Write-Output $Result
}

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...