Powershell Ausgabe von Hyper-V Maschinen-Namen

LukWindows

Cadet 2nd Year
Registriert
Apr. 2020
Beiträge
17
Guten Tag!

Ich habe ein kleines Problem bei dem ich mir nicht sicher bin ob es so funktioniert wie ich es möchte.

Wir nutzen ein Backup Programm welches eine eigene CLI hat (Cloudberry Backup) und ich möchte jetzt die Backuppläne automatisch aktualisieren lassen, sprich sobald jemand eine neue VM mit Stichwort "Testmaschine" in den Kommentaren erstellt, soll diese automatisch dem Backupplan Testmaschinen hinzugefügt werden.
Hier ist mein Code um die Maschinen abzufragen:
Get-VM | Where-Object { $_.Notes -like 'Test'}

Hier werden allerdings ALLE Infos über die Maschinen ausgegeben.
So wird ein Cloudberry Plan editiert:


.\cbb editHyperVPlan -n testplan -v VM1 -v VM2

Mit -n wählt man den Plan aus und mit -v die VM die man hinzufügen möchte.
Da es leider unmöglich ist einfach zu sagen -v und dann das entsprechende Powershell Script einzufügen würde ich gerne ein Powershell Script schreiben welches dann nur die Namen übernimmt. Das heißt es müsste irgendwie nur die Namen ausgeben. Allerdings muss man auch bei diesem Befehl -v jede Maschine neu eingeben das heißt ein voller Befehl für 3 Maschinen wäre so:

.\cbb editHyperVPlan -n testplan -v VM1 -v VM2 -v VM6

Meine Frage währe ob man ein Script schreiben kann das z.B. in ein anderes Script an bestimmter Stelle dann nur -v NameVM1 -v NameVM2 usw. einträgt oder vielleicht sogar im selben Script nur -v NameVM1 etc. hinter den obigen befehl klemmt?

Ich kenne mich nicht sonderlich gut mit PowerShell aus da ich erst im 2.Semester bin, aber wäre trotzdem toll die Aufgabe bewältigt zu kriegen. Würde mich auch freuen wenn Ihr mir sagt ob ich mich vielleicht in die falsche Richtung bewege und es einen viel leichteren Weg gibt.

Liebe Grüße
Luka
 
Code:
Get-VM | Where-Object { $_.Notes -like 'Test'} | Select-Object -ExpandProperty Name
Je nachdem was cbb entgegennimmt, könntest du das Objekt ggf. allerdings auch einfach nur pipen.
Code:
Get-VM | Where-Object { $_.Notes -like 'Test'} | cbb editHyperVPlan
Aber das musst du in dessen Doku nachgucken, was das Cmdlet entgegennehmen kann.
 
  • Gefällt mir
Reaktionen: LukWindows
@Yuuri Genau der letzte Satz ist mein Problem. So wie es aussieht nimmt er wirklich nur -v Name an..
Ich habe schon mehrere andere Sachen versucht nur er speichert halt nicht das was er soll sondern dann nur das erste Wort und ignoriert den Rest.. Und wenn ich es wie in deinem 2. Beispiel macht gibt er mir z.B. nur die Help Befehle aus. Aus denen werde ich aber auch nicht schlauer :/
 
Dann musst du das halt in einer Schleife abarbeiten.
Code:
Get-VM | Where-Object { $_.Notes -like 'Test'} | % {
    .\cbb editHyperVPlan -n testplan -v $_.Name
}
# oder
$args = @()
Get-VM | Where-Object { $_.Notes -like 'Test'} | % {
    $args += ,"-v", $_.Name
}
.\cbb editHyperVPlan -n testplan @args
 
  • Gefällt mir
Reaktionen: LukWindows
Ahh das ist eine gute Idee, wie gesagt kenne mich nicht sogut aus und solche Möglichkeiten sind bei mir noch im Schatten :D Ich probiere es mal aus! leider kann man den Plan nicht einfach mit neuen maschinen editieren, man muss alle Maschinen die man in dem Plan haben will immer komplett einfügen ...

Edit: Ich hab deine Idee @Yuuri ausprobiert allerdings funktioniert es nicht.
Beim ersten kommt 3x (genau so oft wie Maschinen in der Abfrage sind)
CloudBerry Backup VM Edition Command Line Interface started
ERROR: Error occurred in command line: Object reference not set to an instance of an object.

und beim zweiten Teil wird leider nichts in den Backup Plan geschrieben.
 
Zuletzt bearbeitet:
Benutz mal
Code:
$arg = @()
Get-VM | Where-Object { $_.Notes -like 'Test'} | % {
    $arg += ,"-v", $_.Name
}
.\cbb editHyperVPlan -n testplan @arg
$args war ne interne Variable, die kann man wohl nich überschreiben.
 
  • Gefällt mir
Reaktionen: LukWindows
Hi!
Vielen Dank, ich habs jetzt mehr oder weniger geschafft :) Es funktioniert zumindest!
 
Zurück
Oben