Как Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Π΅Π½ ускоритСл Π·Π° PowerCLI скриптовС 

Π Π°Π½ΠΎ ΠΈΠ»ΠΈ късно всСки систСмСн администратор Π½Π° VMware сС ΠΎΠΊΠ°Π·Π²Π° Π² ситуация, Π² която Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π° Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Всичко Π·Π°ΠΏΠΎΡ‡Π²Π° с командния Ρ€Π΅Π΄, слСд Ρ‚ΠΎΠ²Π° PowerShell ΠΈΠ»ΠΈ VMware PowerCLI.

Π”Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ стС усвоили PowerShell ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ стартиранСто Π½Π° ISE ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° стандартни ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΈ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ работят Ρ‡Ρ€Π΅Π· някаква β€žΠΌΠ°Π³ΠΈΡβ€œ. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° Π±Ρ€ΠΎΠΈΡ‚Π΅ стотици Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, Ρ‰Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅, Ρ‡Π΅ скриптовСтС, ΠΊΠΎΠΈΡ‚ΠΎ са Ρ€Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈ Π΄ΠΎΠ±Ρ€Π΅ Π² ΠΌΠ°Π»ΠΊΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈ, сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ. 

Π’ Ρ‚Π°Π·ΠΈ ситуация Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π΄Π²Π° инструмСнта:

  • PowerShell Runspaces – ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° процСси Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ нишки; 
  • Get-View – основна функция Π½Π° PowerCLI, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Π½Π° Get-WMIObject Π² WindowsΠ’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° cmdlet Π½Π΅ ΠΈΠ·Π²Π»ΠΈΡ‡Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π° информация ΠΊΠ°Ρ‚ΠΎ прост ΠΎΠ±Π΅ΠΊΡ‚ с прости Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. Π’ ΠΌΠ½ΠΎΠ³ΠΎ случаи Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ опиша Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ всСки инструмСнт ΠΈ Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° някои ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ скриптовС ΠΈ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ³Π° Сдиният Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΎΡ‚ другия. Π”Π° Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅!

Как Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Π΅Π½ ускоритСл Π·Π° PowerCLI скриптовС 

ΠŸΡŠΡ€Π²ΠΈ Π΅Ρ‚Π°ΠΏ: Runspace

Π’Π°ΠΊΠ° Ρ‡Π΅, Runspace Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ извън основния ΠΌΠΎΠ΄ΡƒΠ». Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС Π΄Ρ€ΡƒΠ³ процСс, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ консумира извСстна ΠΏΠ°ΠΌΠ΅Ρ‚, процСсор ΠΈ Ρ‚.Π½. Ако Π²Π°ΡˆΠΈΡΡ‚ скрипт ΠΎΡ‚Π½Π΅ΠΌΠ° няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Π·Π° изпълнСниС ΠΈ консумира Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚, вСроятно няма Π΄Π° Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Runspace. Но Π·Π° скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ дСсСтки хиляди ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Ρ‚ΠΎΠΉ Π΅ ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ: 
Начало Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° PowerShell Runspaces: Част 1

Какво Π²ΠΈ Π΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Runspace:

  • скорост Ρ‡Ρ€Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° списъка с изпълнявани ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ,
  • ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ изпълнСниС Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ,
  • сигурност.

Π•Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Runspace ΠΏΠΎΠΌΠ°Π³Π°:

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡŠΡ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС прослСдят във vSphere. Π’ vCenter Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ коя Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π° Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ рСсурси Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. Π—Π° щастиС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΌΠΈΠ½ΡƒΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° PowerShell.
Π©Π΅ сподСля скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° систСмнитС администратори Π½Π° VMware Π±ΡŠΡ€Π·ΠΎ Π΄Π° Ρ‚ΡŠΡ€ΡΡΡ‚ Π² цСлия vCenter ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ списък с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини с Π΄Π°Π½Π½ΠΈ Π·Π° срСдната ΠΈΠΌ консумация.  
Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° PowerShell runspaces, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всСки ESXi хост ΡΡŠΠ±ΠΈΡ€Π° информация Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° своитС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ runspace ΠΈ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π·Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ. Π’ΠΎΠ²Π° позволява Π½Π° PowerShell Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄Π° затваря Π·Π°Π΄Π°Ρ‡ΠΈ, вмСсто Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π° хостовСтС Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈ Π΄Π° Ρ‡Π°ΠΊΠ° всСки Π΄Π° изпълни заявката си.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: Как Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎ/ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина Π½Π° Ρ‚Π°Π±Π»ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ESXi

Π’ случая ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, Runspace Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

β€žΠžΠΏΠΈΡ‚Π²Π°ΠΌ сС Π΄Π° напиша скрипт, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΈ записва Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ ΠΈΠΌΠ° доста Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½Π΅ΠΌΠ° 5-8 сСкунди Π½Π° машина.β€œ 

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: Многонишково изпълнСниС Π½Π° PowerCLI с RunspacePool

Π’ΡƒΠΊ Ρ‰Π΅ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ 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: Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Get-View

Π‘Π΅Π³Π° Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° всичко, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ истински случай. 

ПисанС Π½Π° скрипт Π·Π° Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина

Π•Π΄ΠΈΠ½ Π΄Π΅Π½, Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΉ ΠΊΠΎΠ»Π΅Π³Π° ΠΌΠ΅ ΠΏΠΎΠΌΠΎΠ»ΠΈ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌ нСговия скрипт. Π—Π°Π΄Π°Ρ‡Π°Ρ‚Π° бСшС Ρ€ΡƒΡ‚ΠΈΠ½Π½Π°: ​​да намСря всички Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини с Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ cloud.uuid (Π΄Π°, Ρ‚ΠΎΠ²Π° Π΅ възмоТно ΠΏΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини във vCloud Director). 

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ΄Π²Π° Π½Π° ΡƒΠΌ, Π΅:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ списък с всички Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини.
  2. Някак си Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉ списъка.

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° вСрсия бСшС прост скрипт, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Ρ‚ΠΎΠ·ΠΈ:

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
}
# Π”Π°Π»Π΅Π΅ РУКАМИ парсим ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Всичко Π΅ нСвСроятно просто ΠΈ ясно. МоТС Π΄Π° сС напишС Π·Π° няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, с ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠ° Π·Π° ΠΊΠ°Ρ„Π΅. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π°Π²ΠΈΠΉΡ‚Π΅ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π° ΠΈ стС Π³ΠΎΡ‚ΠΎΠ²ΠΈ.

Но Π½Π΅ΠΊΠ° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ:

Как Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Π΅Π½ ускоритСл Π·Π° PowerCLI скриптовС 

Как Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Π΅Π½ ускоритСл Π·Π° PowerCLI скриптовС 

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.  

ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π΅ слСдният:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ списък с всички Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини.
  2. Π’ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ cloud.uuid.
  3. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ‚.
  4. Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡ‚Π° Ρ‡Ρ€Π΅Π· Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ ΠΏΠΎ стойността Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ 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 ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅, ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ сС ΠΎΡ‚ Π½Π΅Π³ΠΎ!

НСка ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ:

Как Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Π΅Π½ ускоритСл Π·Π° PowerCLI скриптовС 

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

НСка ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ:

Как Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Π΅Π½ ускоритСл Π·Π° PowerCLI скриптовС 

9 сСкунди Π—Π° ΠΏΠΎΡ‡Ρ‚ΠΈ 10 000 ΠΎΠ±Π΅ΠΊΡ‚Π° с Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΎ условиС. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ!

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΈΡΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ зависи пряко ΠΎΡ‚ избрания ΠΎΡ‚ вас инструмСнт. ЧСсто Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС ΠΊΠ°ΠΆΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅, Π·Π° Π΄Π° Π³ΠΎ постигнСтС. ВсСки ΠΎΡ‚ ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ускоряванС Π½Π° скриптовС Π΅ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° своята прилоТимост. Надявам сС, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π² Ρ‚Ρ€ΡƒΠ΄Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π΄Π° ΠΎΠ²Π»Π°Π΄Π΅Π΅Ρ‚Π΅ основитС Π½Π° автоматизацията ΠΈ оптимизацията Π½Π° процСситС във Π²Π°ΡˆΠ°Ρ‚Π° инфраструктура.

PS: ΠΠ²Ρ‚ΠΎΡ€ΡŠΡ‚ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈ Π½Π° всички Ρ‡Π»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΡƒΠ½Π°Ρ‚Π° Π·Π° ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° ΠΈ ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°Ρ‚Π° ΠΈΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ статия. Π”ΠΎΡ€ΠΈ Π½Π° Ρ‚Π΅Π·ΠΈ с Π»Π°ΠΏΠΈ. И Π΄ΠΎΡ€ΠΈ Π½Π° Ρ‚Π΅Π·ΠΈ Π±Π΅Π· Π»Π°ΠΏΠΈ, ΠΊΠ°Ρ‚ΠΎ Π±ΠΎΠ° констрикторитС.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с DDoS Π·Π°Ρ‰ΠΈΡ‚Π°, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ ΡƒΠ΅Π± хостинг със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS Π°Ρ‚Π°ΠΊΠΈ, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster