andymix
Goto Top

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)

1
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
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 face-smile
ESXi-Twaeks-und-Befehle
(das Ergebniss wird dort auch landen)

Bin für jede Hilfe dankbar.

Gruß und Danke,
Andreas

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

Doskias
Doskias 10.01.2023 um 17:32:34 Uhr
Goto Top
Moin.

Vor dem Problem stand ich auch mal. Ich hab es dann so gelöst, dass ich mir erst via

1
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"  
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:
1
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
em-pie
em-pie 10.01.2023 aktualisiert um 17:37:43 Uhr
Goto Top
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
1
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 face-wink

Gruß
em-pie
Doskias
Doskias 10.01.2023 um 17:39:13 Uhr
Goto Top
Zitat von @em-pie:
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.