Jump to content

Powershell Array Vergleichen


Go to solution Solved by Refnex,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

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 to comment

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

Edited by Refnex
Link to comment

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 to comment
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...