Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΡΡΠ½ΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° VMware Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° ΡΡΡΠΈΠ½Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΈΡΠΊΠΎ Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ΄Π²Π° PowerShell ΠΈΠ»ΠΈ VMware PowerCLI.
ΠΠ° ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ, ΡΠ΅ ΡΡΠ΅ ΡΡΠ²ΠΎΠΈΠ»ΠΈ PowerShell ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ISE ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΠΊΡΠ°ΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ ΠΏΠΎΡΠ°Π΄ΠΈ βΠ½ΡΠΊΠ°ΠΊΠ²Π° ΠΌΠ°Π³ΠΈΡβ. ΠΠΎΠ³Π°ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° Π±ΡΠΎΠΈΡΠ΅ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Π² ΡΡΠΎΡΠΈΡΠΈ, ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ΡΠ΅, ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ Π² ΠΌΠ°Π»ΡΠΊ ΠΌΠ°ΡΠ°Π±, ΡΠ°Π±ΠΎΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ Π² Π³ΠΎΠ»ΡΠΌ ΠΌΠ°ΡΠ°Π±.
Π ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ 2 ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°:
- PowerShell Runspaces β ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π½ΠΈΡΠΊΠΈ;
- Get-View β Π±Π°Π·ΠΎΠ²Π° PowerCLI ΡΡΠ½ΠΊΡΠΈΡ, Π°Π½Π°Π»ΠΎΠ³ Π½Π° Get-WMIObject Π² Windows. Π’Π°Π·ΠΈ ΠΊΡΠ°ΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΈΠ·ΡΠ΅Π³Π»Ρ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΏΡΠΈΠ΄ΡΡΠΆΠ°Π²Π°ΡΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΏΡΠΎΡΡ ΠΎΠ±Π΅ΠΊΡ Ρ ΠΏΡΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. Π ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°ΠΈ ΠΈΠ·Π»ΠΈΠ·Π° ΠΏΠΎ-Π±ΡΡΠ·ΠΎ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΈ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°. ΠΠ΅ΠΊΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ³Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ. ΠΡΠΈΠ²Π°ΠΌ!
ΠΡΡΠ²ΠΈ Π΅ΡΠ°ΠΏ: Runspace
Π ΡΠ°ΠΊΠ°, Runspace Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°Π΄Π°ΡΠΈ ΠΈΠ·Π²ΡΠ½ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ». Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π΄ΡΡΠ³ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΡΠ΄Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ, ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈ Ρ.Π½. ΠΠΊΠΎ Π²Π°ΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π·Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° Π³ΠΈΠ³Π°Π±Π°ΠΉΡ ΠΏΠ°ΠΌΠ΅Ρ, Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ Runspace. ΠΠΎ Π·Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΡΡΠΈΡΠ΅ ΡΡΠΊ:
ΠΠ°ΡΠ°Π»ΠΎ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° PowerShell Runspaces: Π§Π°ΡΡ 1
ΠΠ°ΠΊΠ²ΠΎ Π΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Runspace:
- ΡΠΊΠΎΡΠΎΡΡ ΡΡΠ΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ,
- ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠΈ,
- ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ.
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Runspace ΠΏΠΎΠΌΠ°Π³Π°:
βΠ‘ΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΡΡΡΠ΄Π½ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π²ΡΠ² vSphere. ΠΡΠ² vCenter Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠΎΡ VM ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅. ΠΠ° ΡΠ°ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΌΠΈΠ½ΡΡΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° PowerShell.
Π©Π΅ ΡΠΏΠΎΠ΄Π΅Π»Ρ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈ Π½Π° VMware Π±ΡΡΠ·ΠΎ Π΄Π° ΡΡΡΡΡΡ Π²ΡΠ² vCenter ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠΏΠΈΡΡΠΊ Ρ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Ρ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡΡ Π½ΠΎΡΠΎ ΡΡΠ΅Π΄Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅.
Π‘ΠΊΡΠΈΠΏΡΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° PowerShell, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ ESXi Ρ ΠΎΡΡ Π΄Π° ΡΡΠ±ΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄Π° Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° PowerShell Π΄Π° Π·Π°ΡΠ²Π°ΡΡ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡΠ΅Π· Ρ ΠΎΡΡΠΎΠ²Π΅ ΠΈ Π΄Π° ΡΠ°ΠΊΠ° Π²ΡΠ΅ΠΊΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠΈ.ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ:
ΠΠ°ΠΊ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΠ΅ I/O Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Π½Π° ΡΠ°Π±Π»ΠΎ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ESXi
Π ΡΠ»ΡΡΠ°Ρ ΠΏΠΎ-Π΄ΠΎΠ»Ρ Runspace Π²Π΅ΡΠ΅ Π½Π΅ Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½:
βΠΠΏΠΈΡΠ²Π°ΠΌ ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ° ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ±ΠΈΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ ΠΎΡ VM ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ° VM ΠΈ Π½Π° Π΅Π΄Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΡΠ΅ ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π°Ρ 5-8 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ:
ΠΠ½ΠΎΠ³ΠΎΠ½ΠΈΡΠΊΠΎΠ² PowerCLI Ρ RunspacePool
Π’ΡΠΊ ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π° Get-View, Π½Π΅ΠΊΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ Π½Π΅Π³ΠΎ.
ΠΡΠΎΡΠΈ Π΅ΡΠ°ΠΏ: Get-View
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π·Π°ΡΠΎ Get-View Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΡΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠΈ ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠΈΡΠ΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ.
ΠΡΠ°ΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·ΡΡΠ°Π²Π°ΡΠ΅ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΡΠΈ Π·Π° API ΠΈ Π΄Π° ΠΏΡΠ΅ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΠΊΠΎΠ»Π΅Π»ΠΎ. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π² ΡΡΠ°ΡΠΈΡΠ΅ Π΄Π½ΠΈ ΠΎΡΠ½Π΅ΠΌΠ°ΡΠ΅ ΡΡΠΎ ΠΈΠ»ΠΈ Π΄Π²Π° ΡΠ΅Π΄Π° ΠΊΠΎΠ΄, PowerShell Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ Ρ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°. ΠΠΈΠ΅ ΠΏΠ»Π°ΡΠ°ΠΌΠ΅ Π·Π° ΡΠΎΠ²Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ Ρ Π±ΡΡΠ·ΠΈΠ½Π°. Π ΡΠ°ΠΌΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠΈ Π½ΡΠΌΠ° ΠΌΠ°Π³ΠΈΡ: ΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ, Π½ΠΎ Π½Π° ΠΏΠΎ-Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ, Π½Π°ΠΏΠΈΡΠ°Π½ ΠΎΡ ΡΠΌΠ΅Π»ΠΈΡΠ΅ ΡΡΡΠ΅ Π½Π° ΠΌΠ°ΠΉΡΡΠΎΡ ΠΎΡ ΡΠ»ΡΠ½ΡΠ΅Π²Π° ΠΠ½Π΄ΠΈΡ.
Π‘Π΅Π³Π°, Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Get-View, Π½Π΅ΠΊΠ° Π²Π·Π΅ΠΌΠ΅ΠΌ cmdlet Get-VM: ΡΠΎΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΠΈΡΡΡΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ Π²ΡΡΡΠ° ΡΡΡΡΠ°Π²Π΅Π½ ΠΎΠ±Π΅ΠΊΡ, ΡΠΎΠ΅ΡΡ ΠΏΡΠΈΠΊΠ°ΡΠ²Π° Π΄ΡΡΠ³ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΊΡΠΌ Π½Π΅Π³ΠΎ: VMHost, Datastore ΠΈ Ρ.Π½.
Get-View Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎ ΠΌΡΡΡΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²Ρ Π½ΠΈΡΠΎ Π½Π΅Π½ΡΠΆΠ½ΠΎ ΠΊΡΠΌ Π²ΡΡΠ½Π°ΡΠΈΡ ΠΎΠ±Π΅ΠΊΡ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΡΠΈΠΊΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΠΌ ΠΊΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ»Π΅ΡΠ½ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΎΠ±Π΅ΠΊΡ. Π Windows Server ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΈ Π² Hyper-V Π² ΡΠ°ΡΡΠ½ΠΎΡΡ cmdlet Get-WMIObject Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π°Π½Π°Π»ΠΎΠ³ - ΠΈΠ΄Π΅ΡΡΠ° Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΡΡΠ°ΡΠ°.
Get-View Π΅ Π½Π΅ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΡΡΡΠΈΠ½Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΡΡ Ρ ΡΠΎΡΠΊΠΎΠ²ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΈ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΈ, ΡΠΎΠ²Π° Π½ΡΠΌΠ° ΡΠ΅Π½Π°.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π² Π±Π»ΠΎΠ³Π° Π½Π° VMware:
ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Get-View
Π‘Π΅Π³Π° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° Π²ΡΠΈΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ.
ΠΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡ Π·Π° ΡΠ°Π·ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° VM
ΠΠ΄ΠΈΠ½ Π΄Π΅Π½ ΠΌΠΎΠΉ ΠΊΠΎΠ»Π΅Π³Π° ΠΌΠ΅ ΠΏΠΎΠΌΠΎΠ»ΠΈ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠΊΡΠΈΠΏΡ. ΠΠ°Π΄Π°ΡΠ°ΡΠ° Π΅ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½Π° ΡΡΡΠΈΠ½Π°: Π½Π°ΠΌΠ΅ΡΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Ρ Π΄ΡΠ±Π»ΠΈΡΠ°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ cloud.uuid (Π΄Π°, ΡΠΎΠ²Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Π²ΡΠ² vCloud Director).
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ΄Π²Π° Π½Π° ΡΠΌ Π΅:
- ΠΠ·Π΅ΠΌΠ΅ΡΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ.
- ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ ΡΠΏΠΈΡΡΠΊΠ° ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½.
ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π±Π΅ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΡ ΡΠΊΡΠΈΠΏΡ:
function Get-CloudUUID1 {
# ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ
ΠΠ
$vms = Get-VM
$report = @()
# ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ 2 ΡΠ²ΠΎΠΉΡΡΠ²Π°: ΠΠΌΡ ΠΠ ΠΈ Cloud UUID.
# ΠΠ°Π½ΠΎΡΠΈΠΌ Π΄Π°Π½Π½ΡΠ΅ Π² Π½ΠΎΠ²ΡΠΉ PS-ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ VM ΠΈ UUID
foreach ($vm in $vms)
{
$table = "" | select VM,UUID
$table.VM = $vm.name
$table.UUID = ($vm | Get-AdvancedSetting -Name cloud.uuid).Value
$report += $table
}
# ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ
$report
}
# ΠΠ°Π»Π΅Π΅ Π Π£ΠΠΠΠ ΠΏΠ°ΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
ΠΡΠΈΡΠΊΠΎ Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΡΠ½ΠΎ. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ Π·Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ Ρ ΠΊΠ°ΡΠ΅ ΠΏΠ°ΡΠ·Π°. ΠΠ°Π²ΠΈΠΉΡΠ΅ ΡΠΈΠ»ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π³ΠΎΡΠΎΠ²ΠΎ.
ΠΠΎ Π½Π΅ΠΊΠ° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ:
2 ΠΌΠΈΠ½ΡΡΠΈ 47 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΡΡΠΈ 10k VM. ΠΠΎΠ½ΡΡ Π΅ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈ ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΡΡΡΠ½ΠΎ ΡΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΡΠΊΡΠΈΠΏΡΡΡ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
Runspaces ΡΠ° ΠΏΡΡΠ²ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ΄Π²Π°Ρ Π½Π° ΠΏΠΎΠΌΠΎΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π½Π° Ρ ΠΎΡΡ ΠΎΡ vCenter ΠΈΠ»ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠ΅ΠΊΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π½ΠΎΡΠΈ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄.
ΠΠΊΠ»ΡΡΠ΅ΡΠ΅ ΠΏΡΡΠ²Π°ΡΠ° ΡΠΊΠΎΡΠΎΡΡ: PowerShell Runspaces
ΠΡΡΠ²ΠΎΡΠΎ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ΄Π²Π° Π½Π° ΡΠΌ Π·Π° ΡΠΎΠ·ΠΈ ΡΠΊΡΠΈΠΏΡ, Π΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΡΠΈΠΊΡΠ»Π° Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π° Π² ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π½ΠΈΡΠΊΠΈ, Π΄Π° ΡΡΠ±Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ ΠΈ Π΄Π° Π³ΠΎ ΡΠΈΠ»ΡΡΠΈΡΠ°.
ΠΠΎ ΠΈΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ: PowerCLI Π½ΡΠΌΠ° Π΄Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΡΠ΅ΡΠΈΠΈ ΠΊΡΠΌ vCenter ΠΈ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅ Π·Π°Π±Π°Π²Π½Π° Π³ΡΠ΅ΡΠΊΠ°:
You have modified the global:DefaultVIServer and global:DefaultVIServers system variables. This is not allowed. Please reset them to $null and reconnect to the vSphere server.
ΠΠ° Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ΅ΡΠΈΡΡΠ° Π²ΡΡΡΠ΅ Π² ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ΅ΠΊΠ° ΡΠΈ ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ PowerShell ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΡΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΊΡΠΌ ScriptBlock. ΠΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ ΡΠ΅ΡΠΈΡΡΠ° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠ°ΠΊΡΠ² ΠΎΠ±Π΅ΠΊΡ, Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ $global:DefaultVIServers (Connect-VIServer Ρ ΠΊΠ»ΡΡ -NotDefault):
$ConnectionString = @()
foreach ($vCenter in $vCenters)
{
try {
$ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -AllLinked -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
}
catch {
if ($er.Message -like "*not part of a linked mode*")
{
try {
$ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
}
catch {
throw $_
}
}
else {
throw $_
}
}
}
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π²Π½Π΅Π΄ΡΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ ΡΡΠ΅Π· Runspace Pools.
ΠΠ»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π΅ ΡΠ»Π΅Π΄Π½ΠΈΡΡ:
- ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ.
- Π ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΠΏΠΎΡΠΎΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ cloud.uuid.
- Π‘ΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΏΠΎΡΠΎΡΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ.
- ΠΠΈΠ΅ ΡΠΈΠ»ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡΠ°, ΠΊΠ°ΡΠΎ Π³ΠΎ Π³ΡΡΠΏΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΠ»Π΅ΡΠΎ CloudUUID: ΡΠ΅Π·ΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ Π±ΡΠΎΡΡ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌ ΠΎΡ 1, ΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΡΠΈΠΌ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠ°:
function Get-VMCloudUUID {
param (
[string[]]
[ValidateNotNullOrEmpty()]
$vCenters = @(),
[int]$MaxThreads,
[System.Management.Automation.PSCredential]
[System.Management.Automation.Credential()]
$Credential
)
$ConnectionString = @()
# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ
foreach ($vCenter in $vCenters)
{
try {
$ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -AllLinked -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
}
catch {
if ($er.Message -like "*not part of a linked mode*")
{
try {
$ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
}
catch {
throw $_
}
}
else {
throw $_
}
}
}
# ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ
ΠΠ
$Global:AllVMs = Get-VM -Server $ConnectionString
# ΠΠΎΠ΅Ρ
Π°Π»ΠΈ!
$ISS = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
$RunspacePool = [runspacefactory]::CreateRunspacePool(1, $MaxThreads, $ISS, $Host)
$RunspacePool.ApartmentState = "MTA"
$RunspacePool.Open()
$Jobs = @()
# ScriptBlock Ρ ΠΌΠ°Π³ΠΈΠ΅ΠΉ!)))
# ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΠΎΡΠΎΠΊΠ΅
$scriptblock = {
Param (
$ConnectionString,
$VM
)
$Data = $VM | Get-AdvancedSetting -Name Cloud.uuid -Server $ConnectionString | Select-Object @{N="VMName";E={$_.Entity.Name}},@{N="CloudUUID";E={$_.Value}},@{N="PowerState";E={$_.Entity.PowerState}}
return $Data
}
# ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ
foreach($VM in $AllVMs)
{
$PowershellThread = [PowerShell]::Create()
# ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡ
$null = $PowershellThread.AddScript($scriptblock)
# Π ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΡΠΈΠΏΡΡ
$null = $PowershellThread.AddArgument($ConnectionString)
$null = $PowershellThread.AddArgument($VM)
$PowershellThread.RunspacePool = $RunspacePool
$Handle = $PowershellThread.BeginInvoke()
$Job = "" | Select-Object Handle, Thread, object
$Job.Handle = $Handle
$Job.Thread = $PowershellThread
$Job.Object = $VM.ToString()
$Jobs += $Job
}
# Π‘ΡΠ°Π²ΠΈΠΌ Π³ΡΠ°Π΄ΡΡΠ½ΠΈΠΊ, ΡΡΠΎΠ±Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΈΠΉ
# Π Π·Π΄Π΅ΡΡ ΠΆΠ΅ ΠΏΡΠΈΠ±ΠΈΠ²Π°Π΅ΠΌ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π²ΡΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ
While (@($Jobs | Where-Object {$_.Handle -ne $Null}).count -gt 0)
{
$Remaining = "$($($Jobs | Where-Object {$_.Handle.IsCompleted -eq $False}).object)"
If ($Remaining.Length -gt 60) {
$Remaining = $Remaining.Substring(0,60) + "..."
}
Write-Progress -Activity "Waiting for Jobs - $($MaxThreads - $($RunspacePool.GetAvailableRunspaces())) of $MaxThreads threads running" -PercentComplete (($Jobs.count - $($($Jobs | Where-Object {$_.Handle.IsCompleted -eq $False}).count)) / $Jobs.Count * 100) -Status "$(@($($Jobs | Where-Object {$_.Handle.IsCompleted -eq $False})).count) remaining - $remaining"
ForEach ($Job in $($Jobs | Where-Object {$_.Handle.IsCompleted -eq $True})){
$Job.Thread.EndInvoke($Job.Handle)
$Job.Thread.Dispose()
$Job.Thread = $Null
$Job.Handle = $Null
}
}
$RunspacePool.Close() | Out-Null
$RunspacePool.Dispose() | Out-Null
}
function Get-CloudUUID2
{
[CmdletBinding()]
param(
[string[]]
[ValidateNotNullOrEmpty()]
$vCenters = @(),
[int]$MaxThreads = 50,
[System.Management.Automation.PSCredential]
[System.Management.Automation.Credential()]
$Credential)
if(!$Credential)
{
$Credential = Get-Credential -Message "Please enter vCenter credentials."
}
# ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Get-VMCloudUUID, Π³Π΄Π΅ ΠΌΡ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ
$AllCloudVMs = Get-VMCloudUUID -vCenters $vCenters -MaxThreads $MaxThreads -Credential $Credential
$Result = $AllCloudVMs | Sort-Object Value | Group-Object -Property CloudUUID | Where-Object -FilterScript {$_.Count -gt 1} | Select-Object -ExpandProperty Group
$Result
}
ΠΡΠ°ΡΠΎΡΠ°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΡΠΊΡΠΈΠΏΡ Π΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ScriptBlock ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΊΡΠΏΠ»ΠΎΠ°ΡΠΈΡΠ°ΠΉΡΠ΅ Π³ΠΎ!
ΠΠΈΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ:
55 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ.
ΠΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ Π²ΡΠΎΡΠ°ΡΠ° ΡΠΊΠΎΡΠΎΡΡ: GetView
ΠΠ΅ΠΊΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄.
ΠΡΡΠ²ΠΎ ΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎ, Get-VM cmdlet ΠΎΡΠ½Π΅ΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅.
ΠΡΠΎΡΠΎ, Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΡΠ°ΡΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Get-AdvancedOptions ΠΎΡΠ½Π΅ΠΌΠ° ΠΎΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅.
ΠΠ΅ΠΊΠ° ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ Ρ Π²ΡΠΎΡΠΎΡΠΎ.
Get-AdvancedOptions Π΅ ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ VM ΠΎΠ±Π΅ΠΊΡΠΈ, Π½ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠΌΠ°Π² ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΡΠ°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΡΠ°ΠΌΠΈΡ ΠΎΠ±Π΅ΠΊΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° (Get-VM). Π’ΠΎΠΉ ΠΏΡΠΎΡΡΠΎ Π΅ Π·Π°ΡΠΎΠ²Π΅Π½ Π΄ΠΎΠ±ΡΠ΅ Π² ΠΎΠ±Π΅ΠΊΡΠ° ExtensionData. ΠΡΠΎΡΡΠΆΠ΅Π½ΠΈ Ρ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅, Π½ΠΈΠ΅ ΡΡΠΊΠΎΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ.
Π‘ Π»Π΅ΠΊΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΊΠ°ΡΠ° ΡΠΎΠ²Π° Π΅:
VM | Get-AdvancedSetting -Name Cloud.uuid -Server $ConnectionString | Select-Object @{N="VMName";E={$_.Entity.Name}},@{N="CloudUUID";E={$_.Value}},@{N="PowerState";E={$_.Entity.PowerState}}
ΠΡΠ΅Π²ΡΡΡΠ° ΡΠ΅ Π² ΡΠΎΠ²Π°:
$VM | Where-Object {($_.ExtensionData.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value -ne $null} | Select-Object @{N="VMName";E={$_.Name}},@{N="CloudUUID";E={($_.ExtensionData.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value}},@{N="PowerState";E={$_.summary.runtime.powerstate}}
Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ Π΅ ΡΡΡΠΈΡΡ ΠΊΠ°ΡΠΎ Get-AdvancedOptions, Π½ΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ.
Π‘Π΅Π³Π° ΠΊΡΠΌ Get-VM. ΠΠ΅ Π΅ Π±ΡΡΠ·, Π·Π°ΡΠΎΡΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΡΠ·Π½ΠΈΠΊΠ²Π° Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π²ΡΠΏΡΠΎΡ: Π·Π°ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΡΡΠ΄ΠΎΠ²ΠΈΡΠ΅Π½ PSObject Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΡΠ°ΠΌΠΎ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°, Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π΅Π΄ΠΈΠ½ Ρ ΠΈΡΡΡ Π°ΡΡΠΈΠ±ΡΡ?
Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΡΠΎ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Get-AdvancedOptions Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠΎ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠ°. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Runspace Pools ΡΠ΅Π³Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π±Π°Π²Π½Π° Π·Π°Π΄Π°ΡΠ° Π² Π½ΠΈΡΠΊΠΈ Π½Π° ΠΊΠ»Π΅ΠΊ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅ ΡΠ΅ΡΠΈΡ. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ Π΅ Π΄ΠΎΠ±ΡΡ, Π½ΠΎ Π½Π΅ Π΅ Π·Π° ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ.
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π° Π½Π° ExtensionData: ΡΠΎΠ²Π° Π½Π΅ Π΅ Π½ΠΈΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Get-View ΠΎΠ±Π΅ΠΊΡ.
ΠΠ΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΡΠ΅Π²Π½Π°ΡΠ° ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π½Π° ΠΌΠ°ΠΉΡΡΠΎΡΠΈΡΠ΅ Π½Π° PowerShell: Π΅Π΄ΠΈΠ½ ΡΠ΅Π΄ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈ, ΡΠΎΡΡΠΈΡΠ°Π½Π΅ ΠΈ Π³ΡΡΠΏΠΈΡΠ°Π½Π΅. Π¦Π΅Π»ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΈΡΠ΅Π½ ΡΠΆΠ°Ρ Π΅ Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΎ ΡΠ²ΠΈΡ Π² Π΅Π΄ΠΈΠ½ ΡΠ΅Π΄ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ Π² Π΅Π΄Π½Π° ΡΠ΅ΡΠΈΡ:
$AllVMs = Get-View -viewtype VirtualMachine -Property Name,Config.ExtraConfig,summary.runtime.powerstate | Where-Object {($_.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value -ne $null} | Select-Object @{N="VMName";E={$_.Name}},@{N="CloudUUID";E={($_.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value}},@{N="PowerState";E={$_.summary.runtime.powerstate}} | Sort-Object CloudUUID | Group-Object -Property CloudUUID | Where-Object -FilterScript {$_.Count -gt 1} | Select-Object -ExpandProperty Group
ΠΠΈΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ:
9 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ Π·Π° ΠΏΠΎΡΡΠΈ 10k ΠΎΠ±Π΅ΠΊΡΠ° Ρ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅. Π‘ΡΡΠ°Ρ
ΠΎΡΠ΅Π½!
ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΈΠ·Π±ΠΎΡΠ° Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. Π§Π΅ΡΡΠΎ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠ°ΠΆΠ΅ ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΡΠΎΠ²Π°. ΠΡΠ΅ΠΊΠΈ ΠΎΡ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π΅ Π΄ΠΎΠ±ΡΡ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ²ΠΎΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠΎΡΡ. ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅, ΡΠ΅ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π² ΡΡΡΠ΄Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
PS: ΠΠ²ΡΠΎΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΡ
Π½Π°ΡΠ° ΠΏΠΎΠΌΠΎΡ ΠΈ ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° ΠΏΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠΎΡΠΈ ΡΠ΅Π·ΠΈ Ρ Π»Π°ΠΏΠΈ. Π Π΄ΠΎΡΠΈ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ°Ρ ΠΊΡΠ°ΠΊΠ°, ΠΊΠ°ΡΠΎ Π±ΠΎΠ° ΠΊΠΎΠ½ΡΡΡΠΈΠΊΡΠΎΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com