Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΡΡΠ½ΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° VMware ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π° Π² ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° ΡΡΡΠΈΠ½Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΈΡΠΊΠΎ Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° PowerShell ΠΈΠ»ΠΈ VMware PowerCLI.
ΠΠ° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΡΡΠ΅ ΡΡΠ²ΠΎΠΈΠ»ΠΈ PowerShell ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ISE ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠΈ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ ΡΡΠ΅Π· Π½ΡΠΊΠ°ΠΊΠ²Π° βΠΌΠ°Π³ΠΈΡβ. ΠΠΎΠ³Π°ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° Π±ΡΠΎΠΈΡΠ΅ ΡΡΠΎΡΠΈΡΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ΡΠ΅, ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΠ°Π±ΠΎΡΠΈΠ»ΠΈ Π΄ΠΎΠ±ΡΠ΅ Π² ΠΌΠ°Π»ΠΊΠΈ ΠΌΠ°ΡΠ°Π±ΠΈ, ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ.
Π ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π΄Π²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°:
- PowerShell Runspaces β ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π½ΠΈΡΠΊΠΈ;
- Get-View β ΠΎΡΠ½ΠΎΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° PowerCLI, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° Π½Π° Get-WMIObject Π² WindowsΠ’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° cmdlet Π½Π΅ ΠΈΠ·Π²Π»ΠΈΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, Π° ΠΈΠ·Π²Π»ΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΡ ΠΎΠ±Π΅ΠΊΡ Ρ ΠΏΡΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. Π ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°ΠΈ ΡΠΎΠ²Π° Π΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ° Π½Π°ΠΊΡΠ°ΡΠΊΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΈ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π½ΡΠΊΠΎΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°. Π©Π΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ³Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ. ΠΠ° Π·Π°ΠΏΠΎΡΠ²Π°ΠΌΠ΅!

ΠΡΡΠ²ΠΈ Π΅ΡΠ°ΠΏ: Runspace
Π’Π°ΠΊΠ° ΡΠ΅, Runspace Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°Π΄Π°ΡΠΈ ΠΈΠ·Π²ΡΠ½ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ». Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π΄ΡΡΠ³ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈ Ρ.Π½. ΠΠΊΠΎ Π²Π°ΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ ΠΎΡΠ½Π΅ΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° Π³ΠΈΠ³Π°Π±Π°ΠΉΡ ΠΏΠ°ΠΌΠ΅Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½ΡΠΌΠ° Π΄Π° Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Runspace. ΠΠΎ Π·Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, ΡΠΎΠΉ Π΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΡΡΠΈΡΠ΅ ΡΡΠΊ:
ΠΠ°ΠΊΠ²ΠΎ Π²ΠΈ Π΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Runspace:
- ΡΠΊΠΎΡΠΎΡΡ ΡΡΠ΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ,
- ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠΈ,
- ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ.
ΠΡΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΊΡΠ΄Π΅ΡΠΎ Runspace ΠΏΠΎΠΌΠ°Π³Π°:
ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΅ Π΅Π΄Π½Π° ΠΎΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΡ Π²ΡΠ² vSphere. Π vCenter Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠΎΡ Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π° Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅. ΠΠ° ΡΠ°ΡΡΠΈΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΌΠΈΠ½ΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° PowerShell.
Π©Π΅ ΡΠΏΠΎΠ΄Π΅Π»Ρ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈ Π½Π° VMware Π±ΡΡΠ·ΠΎ Π΄Π° ΡΡΡΡΡΡ Π² ΡΠ΅Π»ΠΈΡ vCenter ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠΏΠΈΡΡΠΊ Ρ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Ρ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡΠ΅Π΄Π½Π°ΡΠ° ΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ.
Π‘ΠΊΡΠΈΠΏΡΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° PowerShell runspaces, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ESXi Ρ ΠΎΡΡ ΡΡΠ±ΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΎ runspace ΠΈ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π·Π° Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° PowerShell Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄Π° Π·Π°ΡΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΠΈ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π° Ρ ΠΎΡΡΠΎΠ²Π΅ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈ Π΄Π° ΡΠ°ΠΊΠ° Π²ΡΠ΅ΠΊΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠΈ.ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ:
Π ΡΠ»ΡΡΠ°Ρ ΠΏΠΎ-Π΄ΠΎΠ»Ρ, Runspace Π²Π΅ΡΠ΅ Π½Π΅ Π΅ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
βΠΠΏΠΈΡΠ²Π°ΠΌ ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ° ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ±ΠΈΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ ΡΠΎΠ²Π° ΠΎΡΠ½Π΅ΠΌΠ° 5-8 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°.β
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ:
Π’ΡΠΊ ΡΠ΅ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Get-View, Π½Π΅ΠΊΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ Π½Π΅Π³ΠΎ.
ΠΡΠΎΡΠΈ Π΅ΡΠ°ΠΏ: Get-View
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π·Π°ΡΠΎ Get-View Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΡΠΈ ΡΡΡΡΠ²Π° Π΄Π° ΡΠΈ ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠΈΡΠ΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ.
ΠΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠΈΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΡΠΎΠ²ΠΈΠΌ Π² API ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΈ Π΄Π° ΠΏΡΠ΅ΠΎΡΠΊΡΠΈΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ»Π΅Π»ΠΎΡΠΎ. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π² ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠ΅ ΡΡΠΎΡΠΈΠ½Π° ΡΠ΅Π΄Π° ΠΊΠΎΠ΄, PowerShell Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Ρ Π΅Π΄Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π’ΠΎΠ²Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈΠ΄Π²Π° Π·Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ°. Π ΡΠ°ΠΌΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠΈ Π½ΡΠΌΠ° ΠΌΠ°Π³ΠΈΡ: ΡΠ΅ ΡΠ° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΡΠΊΡΠΈΠΏΡ, Π½ΠΎ Π½Π° ΠΏΠΎ-Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ, Π½Π°ΠΏΠΈΡΠ°Π½ ΠΎΡ ΡΠΌΠ΅Π»ΠΈΡΠ΅ ΡΡΡΠ΅ Π½Π° ΠΌΠ°ΠΉΡΡΠΎΡ ΠΎΡ ΡΠ»ΡΠ½ΡΠ΅Π²Π° ΠΠ½Π΄ΠΈΡ.
Π‘Π΅Π³Π°, Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Get-View, Π½Π΅ΠΊΠ° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠ° Get-VM: ΡΠΎΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ Π²ΡΡΡΠ° ΡΡΡΡΠ°Π²Π΅Π½ ΠΎΠ±Π΅ΠΊΡ, ΡΠΎΠ΅ΡΡ ΠΏΡΠΈΠΊΠ°ΡΠ²Π° ΠΊΡΠΌ Π½Π΅Ρ Π΄ΡΡΠ³ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ: VMHost, Datastore ΠΈ Ρ.Π½.
Get-View Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎ ΠΌΡΡΡΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²Ρ Π½ΠΈΡΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΊΡΠΌ Π²ΡΡΠ½Π°ΡΠΈΡ ΠΎΠ±Π΅ΠΊΡ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΡΠΈΠΊΡΠ½ΠΎ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΎΠΏΡΠΎΡΡΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΎΠ±Π΅ΠΊΡ. Windows Server ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ, ΠΈ Π² Hyper-V Π² ΡΠ°ΡΡΠ½ΠΎΡΡ, ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΡΡ Get-WMIObject Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π°Π½Π°Π»ΠΎΠ³ β ΠΈΠ΄Π΅ΡΡΠ° Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΡΡΠ°ΡΠ°.
Get-View Π΅ Π½Π΅ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΡΡΡΠΈΠ½Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΈΠ»ΠΈ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, Π΅ Π±Π΅Π·ΡΠ΅Π½Π΅Π½.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π² Π±Π»ΠΎΠ³Π° Π½Π° VMware:
Π‘Π΅Π³Π° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° Π²ΡΠΈΡΠΊΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ.
ΠΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡ Π·Π° ΡΠ°Π·ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°
ΠΠ΄ΠΈΠ½ Π΄Π΅Π½, Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΉ ΠΊΠΎΠ»Π΅Π³Π° ΠΌΠ΅ ΠΏΠΎΠΌΠΎΠ»ΠΈ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠΊΡΠΈΠΏΡ. ΠΠ°Π΄Π°ΡΠ°ΡΠ° Π±Π΅ΡΠ΅ ΡΡΡΠΈΠ½Π½Π°: ββΠ΄Π° Π½Π°ΠΌΠ΅ΡΡ Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Ρ Π΄ΡΠ±Π»ΠΈΡΠ°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ 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 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΡΡΠΈ 10 000 Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ. ΠΠΎΠ½ΡΡ Π΅ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈ ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΡΡΡΠ½ΠΎ ΡΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π΅, ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡΡ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
Runspaces ΡΠ° ΠΏΡΡΠ²Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ Π½Π° Π·Π°ΡΠΈΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΠΈΠ·Π²Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π·Π° Ρ ΠΎΡΡΠ° ΠΎΡ vCenter ΠΈΠ»ΠΈ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠ΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄.
ΠΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° First Speed: 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 ΠΎΡΠ½Π΅ΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅.
ΠΡΠΎΡΠΎ, ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΠ° ΠΏΠΎΡΡΠΈ 10 000 ΠΎΠ±Π΅ΠΊΡΠ° Ρ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅. ΠΡΠ»ΠΈΡΠ½ΠΎ!
ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈ ΠΏΡΡΠΊΠΎ ΠΎΡ ΠΈΠ·Π±ΡΠ°Π½ΠΈΡ ΠΎΡ Π²Π°Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. Π§Π΅ΡΡΠΎ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠ°ΠΆΠ΅ ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅, Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅. ΠΡΠ΅ΠΊΠΈ ΠΎΡ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ²ΠΎΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠΎΡΡ. ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅, ΡΠ΅ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π² ΡΡΡΠ΄Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΄Π° ΠΎΠ²Π»Π°Π΄Π΅Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
PS: ΠΠ²ΡΠΎΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΡΠ½Π°ΡΠ° Π·Π° ΠΏΠΎΠΌΠΎΡΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ°ΡΠ° ΠΈΠΌ ΠΏΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ. ΠΠΎΡΠΈ Π½Π° ΡΠ΅Π·ΠΈ Ρ Π»Π°ΠΏΠΈ. Π Π΄ΠΎΡΠΈ Π½Π° ΡΠ΅Π·ΠΈ Π±Π΅Π· Π»Π°ΠΏΠΈ, ΠΊΠ°ΡΠΎ Π±ΠΎΠ° ΠΊΠΎΠ½ΡΡΡΠΈΠΊΡΠΎΡΠΈΡΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com
