Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!

PowerCLI mit Objekten verstehen

Alles zum Thema vSphere 6.5, ESXi 6.5 und vCenter Server.

Moderatoren: irix, Dayworker

Member
Beiträge: 4
Registriert: 05.12.2018, 09:08

PowerCLI mit Objekten verstehen

Beitragvon maino » 05.12.2018, 12:18

Hallo,

ich habe in einem Forum folgenden Code entdeckt:

Code: Alles auswählen

$vmName = 'VM1'
$nicName = 'Network Adapter 1'
$directPath = $false   # or $true to enable Direct Path IO
$vm = Get-VM -Name VM1
$nic = Get-NetworkAdapter -VM $vm -Name $nicName

 
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

$dev = New-Object VMware.Vim.VirtualDeviceConfigSpec

$dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::edit

$dev.Device = [VMware.Vim.VirtualDevice]$nic.ExtensionData

$dev.Device.UptCompatibilityEnabled = $directPath

$spec.DeviceChange += $dev

$vm.ExtensionData.ReconfigVM($spec)


Kann mir jemand erklären wie das genau funktioniert und wie man soweit kommt?
Oder weiß jemand nach was ich suchen soll?

Vielen Dank für die Hilfe ;)

King of the Hill
Beiträge: 12942
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Re: PowerCLI mit Objekten verstehen

Beitragvon irix » 05.12.2018, 15:46

Na warum hast du dann den guten Luc nicht gleich gefragt. Der ist voll nett und macht gefuehlt den ganzen Tag eh nichts anderes ausser Powershell :) Tolle Buecher schreibt er auch.

Das was im Code fehlt ist Anmeldung an vCenter/ESXi.
Ansonsten wird in dem Code eine Configuration der vNIC #1 der VM mit dem Namen "VM1" vorgenommen. Ich muesste nachlesen was UptCompatibilityEnabled ist und in welchen Faellen man es denn aendern will.

Ok.. in der API gegoogled und https://pubs.vmware.com/vsphere-6-5/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvim.vm.device.VirtualEthernetCard.html das kommt heraus.

Somit ist das Code Beispielt nicht ganz korrekt weil es davon aus geht das die NIC generell eine VMXNET3 ist und nur da kann an laut Doku den Parameter aendern bzw. existiert der nur. Wenn man also eine E1000(e) hat in der VM dann wird wohl eine Fehlermeldung kommen.

Ansonsten liest der Code die vorhanden vNIC Konfiguration aus und speichert diese. Dann wird eine neue/leere Konfig angelegt und nur der eine Wert hineingeschrieben. Diese Konfig ueberschreib dann die vorhandene und die Aenderung wird ausgefuehrt.

Gruss
Joerg

Member
Beiträge: 4
Registriert: 05.12.2018, 09:08

Re: PowerCLI mit Objekten verstehen

Beitragvon maino » 07.12.2018, 07:24

Hi,

wer ist Luc?
Wenn er das Thema auch behandelt, bin ich für jeder Erkenntnis oder jedes Buch offen;)

Ich beschreibe mein Verständnisproblem etwas konkreter:


Code: Alles auswählen

 
  $spec = New-Object VMware.Vim.VirtualMachineConfigSpec



Hier erstelle ich ein Objekt in schreibe diese in eine Variable.
Warum erstelle ich ein Objekt in als Name "VMware.Vim.VirtualMachineConfigSpec" und nicht eines das XYZ heißt?
Wie komme ich darauf, dass ich genau dort oder mit diesem Namen ein Objekt erstellen soll?

Code: Alles auswählen

$dev = New-Object VMware.Vim.VirtualDeviceConfigSpec
 


Das gleiche auch hier. Warum ein spezifisches und keines das ZYX?

Code: Alles auswählen

$dev.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::edit
 

Was möchte ich erreichen wenn ich eine Eigenschaft/property (glaube ich ) erzeuge und wieder in eine Variable schreibe?
Was bedeuten die "::" und was soll das "edit"?


Code: Alles auswählen

$dev.Device = [VMware.Vim.VirtualDevice]$nic.ExtensionData
 


Ok, hier schreibe ich die Eigenschaften einer bestimmten Netzwerkarte in die Variable !


Code: Alles auswählen

$dev.Device.UptCompatibilityEnabled = $directPath
 


Jetzt greife ich eine bestimmte Eigenschaft der erzeugten Variable ab und setze sie gleich false!

Code: Alles auswählen

$spec.DeviceChange += $dev
 

Was macht das?

Code: Alles auswählen

$vm.ExtensionData.ReconfigVM($spec)
 

Das scheint wohl da zu sein damit die Veränderung zurückgeschrieben werden, oder?

Vielen Dank

Guru
Beiträge: 2731
Registriert: 23.02.2012, 12:26

Re: PowerCLI mit Objekten verstehen

Beitragvon ~thc » 07.12.2018, 11:13

Mit einer halbwegs aktuellen PowerCLI (6.5) funktioniert das nicht mehr - "Operation" und "Device" sind keine gültigen Eigenschaften von "VirtualDeviceConfigSpec".

Als Lern-Beispiel taugt das daher nicht.

P.S.: Das hier ist eher geeignet: https://scriptingblog.com/tag/vmware-vim-virtualmachineconfigspec/

Member
Beiträge: 4
Registriert: 05.12.2018, 09:08

Re: PowerCLI mit Objekten verstehen

Beitragvon maino » 11.12.2018, 09:22

Leider wird es dort auch nicht wirklich erklärt!

Guru
Beiträge: 2731
Registriert: 23.02.2012, 12:26

Re: PowerCLI mit Objekten verstehen

Beitragvon ~thc » 11.12.2018, 11:42

So habe ich das auch nicht gemeint - ich finde es nur zielführender, ein Beispiel zu nehmen, das dann auch funktioniert.

- Hast du schon Erfahrung mit anderen objektorientierten Sprachen?
- Stell bitte neue Fragen anhand des neuen Beispiels

Ich fange mal an:

Code: Alles auswählen

$vmConfigSpec = new-object VMware.Vim.VirtualMachineConfigSpec

Der Befehl "New-Object" erzeugt eine Instanz eines Objektes der angegebenen Klasse "VMware.Vim.VirtualMachineConfigSpec" - dies wird in die Variable "$mConfigSpec" geschrieben.

Member
Beiträge: 4
Registriert: 05.12.2018, 09:08

Re: PowerCLI mit Objekten verstehen

Beitragvon maino » 11.12.2018, 15:43

~thc hat geschrieben:So habe ich das auch nicht gemeint - ich finde es nur zielführender, ein Beispiel zu nehmen, das dann auch funktioniert.

- Hast du schon Erfahrung mit anderen objektorientierten Sprachen?
- Stell bitte neue Fragen anhand des neuen Beispiels

Ich fange mal an:

Code: Alles auswählen

$vmConfigSpec = new-object VMware.Vim.VirtualMachineConfigSpec

Der Befehl "New-Object" erzeugt eine Instanz eines Objektes der angegebenen Klasse "VMware.Vim.VirtualMachineConfigSpec" - dies wird in die Variable "$mConfigSpec" geschrieben.



Ok! Das habe ich verstanden, woher weiß ich das ich genau diese Klasse in eine Variable schreiben muss?

Guru
Beiträge: 2731
Registriert: 23.02.2012, 12:26

Re: PowerCLI mit Objekten verstehen

Beitragvon ~thc » 11.12.2018, 18:42

Später im Code findest du

Code: Alles auswählen

$Task = ($vm.ExtensionData).ReconfigVM_Task($vmConfigSpec)

Die Objekt-Methode "ReconfigVM_Task" der Objekt-Eigenschaft "Extensiondata" eines VM-Objektes (VMware.Vim.VirtualMachine) erwartet einen Parameter in Form eines Objektes vom Typ "VMware.Vim.VirtualMachineConfigSpec".


Zurück zu „vSphere 6.5“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste