Erste zwei Spalten an Schleife übergeben
Hallo zusammen,
ich Suche ein wenig Hilfe bei zerlegen einer Textdatei, damit ich die 61 und 84 automatisch einsetzen kann, da sie sich immer mal wieder ändern.
Das ganze soll einen Art Sicherung sein und ich würde mir gerne sparren die 3 Zeillen pro Maschine zu wiederholen vor allem, da sich die Vmid immer Mal ändert. (wenn ich mal eine Maschine deregitriere und wieder registrieren)
Die Textdatei sieht wie folgt aus.
Als gegenleistung kann ich vielleicht paar Tips für für Home-ESX Server geben
ESXi-Twaeks-und-Befehle
(das Ergebniss wird dort auch landen)
Bin für jede Hilfe dankbar.
Gruß und Danke,
Andreas
ich Suche ein wenig Hilfe bei zerlegen einer Textdatei, damit ich die 61 und 84 automatisch einsetzen kann, da sie sich immer mal wieder ändern.
Das ganze soll einen Art Sicherung sein und ich würde mir gerne sparren die 3 Zeillen pro Maschine zu wiederholen vor allem, da sich die Vmid immer Mal ändert. (wenn ich mal eine Maschine deregitriere und wieder registrieren)
1
2
3
2
3
plink.exe -ssh root@%esx% -pw %pass% vim-cmd vmsvc/power.shutdown 84
%ovf% -tt=ova vi://root:%pass%@%esx%/61 %ziel%
plink.exe -ssh root@%esx% -pw %pass% vim-cmd vmsvc/power.on 84
Die Textdatei sieht wie folgt aus.
1
2
3
4
5
2
3
4
5
Vmid Name File Guest OS Version Annotation
101 62 [nvme] 62/62.vmx windows9_64Guest vmx-20
61 072 [ssd] 072/072.vmx windows9_64Guest vmx-20
84 61 [nvme] 61/61.vmx windows9_64Guest vmx-20 Es war
86 63 [nvme] 63/63.vmx windows9_64Guest vmx-20
Als gegenleistung kann ich vielleicht paar Tips für für Home-ESX Server geben
ESXi-Twaeks-und-Befehle
(das Ergebniss wird dort auch landen)
Bin für jede Hilfe dankbar.
Gruß und Danke,
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5277352295
Url: https://administrator.de/forum/erste-zwei-spalten-an-schleife-uebergeben-5277352295.html
Ausgedruckt am: 08.04.2025 um 00:04 Uhr
3 Kommentare
Neuester Kommentar
Moin.
Vor dem Problem stand ich auch mal. Ich hab es dann so gelöst, dass ich mir erst via
die liste der Vms hole. Da hast du dann Name, Powerstate, Num CpUs und MemoryGB in der Liste.
Dann hole ich mir mittels
die VM Infos.
Danach wird es etwas komplizierter. Mittels einer Schleife mach ich erst ein Replace aller doppelten Leerzeichen durch ein Leerzeichen und zwar solange bis keine doppelten Leerzeichen mehr existieren. Ist das der Fall, dann ist $VMs_ESX im richtigen Format. Jetzt kommt für jede VM in einer Schleife ein Split nach einzelnen Leerzeichen. Dadurch erhältst du an Position 1 des Splits deine ID und an Position 2 deinen VM Namen. Das ganze wird in eine $VM_Liste zusammengeführt.
Dann folgt:
Ich lasse das Skript automatisiert über mehrere ESX-Laufen, sammle mir eine Liste von VMs und den dazugehörigen ESX-Severn zusammen und fahre die Server dann in einer von mir definierten Reihenfolge herunter (erst Applikationen, dann Datenbanken, ....) . Daher auch das | ? Name -like "*Irgendwas*". Unsere VMs ändern sich recht wenig, sowohl vom Namen als auch von der VMID nicht, allerdings können sie zwischen den ESX-Servern mal wechseln.
Vom Prinzip kannst du das aber übernehmen. Definiere für dich eine Reihenfolge in der die VMs heruntergefahren werden sollen, dann suchst du die passende ID zu dem Namen, erstellst dir (bei mir) PLink_Batch und führst den Shutdown dahingehend durch. Wenn du alle VMs in einer Liste hast, dann musst du das ganze nur in ein foreach stecken und fertig.
Gruß
Doskias
Vor dem Problem stand ich auch mal. Ich hab es dann so gelöst, dass ich mir erst via
1
2
3
2
3
Connect-VIServer Server -User root -Password Passwort
$ESX=VMware.VimAutomation.Core\get-vm
disConnect-VIServer Server 3 -Confirm:$false
die liste der Vms hole. Da hast du dann Name, Powerstate, Num CpUs und MemoryGB in der Liste.
Dann hole ich mir mittels
1
$VMs_ESX=plink.exe -ssh -pw Passwort root@Server -batch "vim-cmd vmsvc/getallvms"
Danach wird es etwas komplizierter. Mittels einer Schleife mach ich erst ein Replace aller doppelten Leerzeichen durch ein Leerzeichen und zwar solange bis keine doppelten Leerzeichen mehr existieren. Ist das der Fall, dann ist $VMs_ESX im richtigen Format. Jetzt kommt für jede VM in einer Schleife ein Split nach einzelnen Leerzeichen. Dadurch erhältst du an Position 1 des Splits deine ID und an Position 2 deinen VM Namen. Das ganze wird in eine $VM_Liste zusammengeführt.
Dann folgt:
1
2
3
4
2
3
4
$VM_IM_Shutdown=$VM_Liste | ? Name -like "*Irgendwas*"
$Plink_Batch= "vim-cmd vmsvc/power.shutdown "+$VM_IM_Shutdown.VMID
$PLink_Login="root@"+$VM_IM_Shutdown.ESX
plink.exe -ssh -pw Passwort $PLink_Login -batch $Plink_Batch
Ich lasse das Skript automatisiert über mehrere ESX-Laufen, sammle mir eine Liste von VMs und den dazugehörigen ESX-Severn zusammen und fahre die Server dann in einer von mir definierten Reihenfolge herunter (erst Applikationen, dann Datenbanken, ....) . Daher auch das | ? Name -like "*Irgendwas*". Unsere VMs ändern sich recht wenig, sowohl vom Namen als auch von der VMID nicht, allerdings können sie zwischen den ESX-Servern mal wechseln.
Vom Prinzip kannst du das aber übernehmen. Definiere für dich eine Reihenfolge in der die VMs heruntergefahren werden sollen, dann suchst du die passende ID zu dem Namen, erstellst dir (bei mir) PLink_Batch und führst den Shutdown dahingehend durch. Wenn du alle VMs in einer Liste hast, dann musst du das ganze nur in ein foreach stecken und fertig.
Gruß
Doskias
Moin,
vorab: Muss es Batch sein oder kann es auch die Powershell sein?
Ideal wäre es natürlich mit PwerCLI, ich weiss gerade aber nicht, ob die sich gegen den ESXi free verbinden lässt...
Wenn Powershell:
lege eine CSV an, mit dem Aufbau
Per
Zudem kann die Powershell auch selbst SSH, sodass du kein plink (mehr) benötigst
Gruß
em-pie
vorab: Muss es Batch sein oder kann es auch die Powershell sein?
Ideal wäre es natürlich mit PwerCLI, ich weiss gerade aber nicht, ob die sich gegen den ESXi free verbinden lässt...
Wenn Powershell:
lege eine CSV an, mit dem Aufbau
1
2
3
2
3
Maschine1;Maschine2
61;84
4711;0815
Per
Import-CSV()
kannst du dann ein Objekt erzeugen erzeugen lassen, welches du dann per foreach()
dein obiges ausführen lassen kannst.Zudem kann die Powershell auch selbst SSH, sodass du kein plink (mehr) benötigst
Gruß
em-pie
Zitat von @em-pie:
vorab: Muss es Batch sein oder kann es auch die Powershell sein (@Rest: Home-ESXi != PowerCLI...)?
vorab: Muss es Batch sein oder kann es auch die Powershell sein (@Rest: Home-ESXi != PowerCLI...)?
Ah verdammt. Vergiss den Großteil was ich geschrieben habe. ich hab das Home-ESXi irgendwie überlesen. Den letzten Abschnitt kannst du aber dennoch nutzen, wenn du die CSV-Datei die em-pie als Basis für dein foreach nimmst.