αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαž§αž”αž€αžšαžŽαŸαž‡αŸ†αžšαž»αž‰αž‚αŸ’αžšαžΆαž”αŸ‹αžšαŸ‰αž»αž€αŸ’αž€αŸ‚αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αž‚αŸ’αžšαžΈαž” PowerCLI 

αž˜αž·αž“αž™αžΌαžšαž˜αž·αž“αž†αžΆαž”αŸ‹ αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ VMware αžŽαžΆαž˜αž½αž™αž˜αž€αž’αŸ’αžœαžΎαž€αž·αž…αŸ’αž…αž€αžΆαžšαž’αž˜αŸ’αž˜αžαžΆαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αž€ PowerShell ឬ VMware PowerCLI αŸ”

αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž’αŸ’αž“αž€αž”αžΆαž“αžŸαŸ’αž‘αžΆαžαŸ‹αž‡αŸ†αž“αžΆαž‰ PowerShell αž”αž“αŸ’αžαž·αž…αž‡αžΆαž„αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš ISE αž“αž·αž„αž”αŸ’αžšαžΎ cmdlets αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ "αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαžœαŸαž‘αž˜αž“αŸ’αž" αŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž€αŸ’αž“αž»αž„αž…αŸ†αž“αž½αž“αžšαžΆαž”αŸ‹αžšαž™ αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžαžΆαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αž‡αž½αž™αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αžšαž·αžαžαžΌαž…αž˜αž½αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αžΊαžαž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαžαž’αŸ†αŸ” 

αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸαŸ‡ αž§αž”αž€αžšαžŽαŸαž…αŸ†αž“αž½αž“ ្ αž“αžΉαž„αž‡αž½αž™αŸ–

  • PowerShell Runspaces - αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€; 
  • αž‘αž‘αž½αž›αž”αžΆαž“-αž˜αžΎαž› - αž˜αž»αžαž„αžΆαžš PowerCLI αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž‡αžΆ analogue αž“αŸƒ Get-WMIObject αž“αŸ…αž€αŸ’αž“αž»αž„ Windows αŸ” cmdlet αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž‘αžΆαž‰β€‹αžœαžαŸ’αžαž»β€‹αžŠαŸ‚αž›β€‹αž’αž˜β€‹αž‡αžΆαž˜αž½αž™β€‹αž’αž„αŸ’αž‚αž—αžΆαž–β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž‘αž‘αž½αž›β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž€αŸ’αž“αž»αž„β€‹αž‘αž˜αŸ’αžšαž„αŸ‹β€‹αž‡αžΆβ€‹αžœαžαŸ’αžαž»β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž”αŸ’αžšαž—αŸαž‘β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αžŸαžΆαž˜αž‰αŸ’αž‰αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αžœαžΆαž…αŸαž‰αž˜αž€αž›αžΏαž“αž‡αžΆαž„αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈαž§αž”αž€αžšαžŽαŸαž“αžΈαž˜αž½αž™αŸ— αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž…αžΌαžšαž™αžΎαž„αžœαž·αž—αžΆαž‚αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž αžΎαž™αž˜αžΎαž›αžαžΆαžαžΎαž–αŸαž›αžŽαžΆαž˜αž½αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αž‡αžΆαž„αž˜αž½αž™αž‘αŸ€αžαŸ” αž‘αŸ…!

αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαž§αž”αž€αžšαžŽαŸαž‡αŸ†αžšαž»αž‰αž‚αŸ’αžšαžΆαž”αŸ‹αžšαŸ‰αž»αž€αŸ’αž€αŸ‚αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αž‚αŸ’αžšαžΈαž” PowerCLI

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„αŸ– αž€αž“αŸ’αž›αŸ‚αž„αžšαžαŸ‹

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ Runspace αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αž“αŸƒαž—αžΆαžšαž€αž·αž…αŸ’αž…αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αŸ‰αžΌαžŒαž»αž›αž˜αŸαŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž“αžΉαž„αžŸαŸŠαžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžαž½αžšαž€αŸ’αž”αžΆαž›αž‡αžΆαžŠαžΎαž˜αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž–αžΈαžšαž”αžΈαž“αžΆαž‘αžΈ αž αžΎαž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž˜αž½αž™αž‡αžΈαž αŸ’αž‚αžΆαž”αŸƒ αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž‘αŸ†αž“αž„αž‡αžΆαž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžš Runspace αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžαŸ’αžαž»αžšαžΆαž”αŸ‹αž˜αŸ‰αžΊαž“αž‚αžΊαžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžšαŸ€αž“αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ– 
αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ PowerShell RunspacesαŸ– αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1

αžαžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Runspace αž•αŸ’αžαž›αŸ‹αž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αŸ–

  • αž›αŸ’αž”αžΏαž“αžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αž”αž‰αŸ’αž‡αžΈαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·,
  • αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž—αžΆαžšαž€αž·αž…αŸ’αž…αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆ,
  • αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αŸ”

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž“αŸ…αž–αŸαž›αžŠαŸ‚αž› Runspace αž‡αž½αž™αŸ–

"αž€αžΆαžšαžˆαŸ’αž›αŸ„αŸ‡αž”αŸ’αžšαž€αŸ‚αž€αž‚αŸ’αž“αžΆαž“αŸƒαž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αž‚αžΊαž‡αžΆαžšαž„αŸ’αžœαžΆαžŸαŸ‹αžŠαŸαž›αŸ†αž”αžΆαž€αž”αŸ†αž•αž»αžαž˜αž½αž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ vSphere αŸ” αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ vCenter αž’αŸ’αž“αž€αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž’αžΆαž…αž…αžΌαž›αž‘αŸ…αž˜αžΎαž›αžαžΆ VM αž˜αž½αž™αžŽαžΆαž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αž•αŸ’αž‘αž»αž€αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ„αŸ‡αž‘αŸαŸ” αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž“αžΆαž‘αžΈ αžŠαŸ„αž™αžŸαžΆαžš PowerShell αŸ”
αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ VMware αžŸαŸ’αžœαŸ‚αž„αžšαž€αž™αŸ‰αžΆαž„αž›αžΏαž“αž‘αžΌαž‘αžΆαŸ†αž„ vCenter αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΈ VM αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž˜αž’αŸ’αž™αž˜αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ”  
αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž”αŸ’αžšαžΎ PowerShell runspaces αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ ESXi αž“αžΈαž˜αž½αž™αŸ—αž”αŸ’αžšαž˜αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αžΈ VMs αž•αŸ’αž‘αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Runspace αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž αžΎαž™αžšαžΆαž™αž€αžΆαžšαžŽαŸαž–αžΈαž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αž—αŸ’αž›αžΆαž˜αŸ—αŸ” αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™ PowerShell αž”αž·αž‘αž€αžΆαžšαž„αžΆαžšαž—αŸ’αž›αžΆαž˜αŸ— αž‡αžΆαž‡αžΆαž„αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαžαžΆαž˜αžšαž™αŸˆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž“αž·αž„αžšαž„αŸ‹αž…αžΆαŸ†αž±αŸ’αž™αž–αž½αž€αž‚αŸαž”αŸ†αž–αŸαž‰αžŸαŸ†αžŽαžΎαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αŸ”"

αž”αŸ’αžšαž—αž–: αžšαž”αŸ€αž”αž”αž„αŸ’αž αžΆαž‰αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž I/O αž“αŸ…αž›αžΎαž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ ESXi

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ Runspace αž›αŸ‚αž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‘αŸ€αžαž αžΎαž™αŸ–

β€œαžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž–αŸ’αž™αžΆαž™αžΆαž˜αžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž…αŸ’αžšαžΎαž“αž–αžΈ VM αž αžΎαž™αžŸαžšαžŸαŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈαž“αŸ…αž–αŸαž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ” αž”αž‰αŸ’αž αžΆαž‚αžΊαžαžΆαž˜αžΆαž“ VM αž…αŸ’αžšαžΎαž“αžŽαžΆαžŸαŸ‹ αž αžΎαž™ 5-8 αžœαž·αž“αžΆαž‘αžΈαžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ‚αž˜αž½αž™αŸ” 

αž”αŸ’αžšαž—αž–: Multithreading PowerCLI αž‡αžΆαž˜αž½αž™ RunspacePool

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš Get-View αžαŸ„αŸ‡αž”αž“αŸ’αžαž‘αŸ…αžœαžΆαŸ” 

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΈαž–αžΈαžšαŸ– αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–

αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž› Get-View αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸ αžœαžΆαžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› cmdlets αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž‘αžΌαž‘αŸ…αŸ” 

Cmdlets αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž› αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž·αž€αŸ’αžŸαžΆαžŸαŸ€αžœαž—αŸ…αž™αŸ„αž„ API αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž€αž„αŸ‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αžΎαž„αžœαž·αž‰αŸ” αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αž“αŸ…β€‹αžŸαž˜αŸαž™β€‹αžŠαžΎαž˜β€‹αž™αž€β€‹αž€αžΌαžŠβ€‹αž˜αž½αž™β€‹αžšαž™ αž¬β€‹αž–αžΈαžšβ€‹αž”αž“αŸ’αž‘αžΆαžαŸ‹ PowerShell αž’αž“αž»αž‰αŸ’αž‰αžΆαžβ€‹αž±αŸ’αž™β€‹αž’αŸ’αž“αž€β€‹αž’αŸ’αžœαžΎβ€‹αžŠαŸ„αž™β€‹αž–αžΆαž€αŸ’αž™β€‹αž”αž‰αŸ’αž‡αžΆβ€‹αž˜αž½αž™αŸ” αž™αžΎαž„αž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αŸ’αž”αžΏαž“αŸ” αž˜αž·αž“αž˜αžΆαž“αžœαŸαž‘αž˜αž“αŸ’αžαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ cmdlets αžαŸ’αž›αž½αž“αž―αž„αž‘αŸ: αž’αž€αŸ’αžŸαžšαžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžŠαŸƒαžŠαŸαž”αŸ‰αž·αž“αž”αŸ’αžšαžŸαž”αŸ‹αžšαž”αžŸαŸ‹αž˜αŸαž˜αž€αž–αžΈαž”αŸ’αžšαž‘αŸαžŸαž₯αžŽαŸ’αžŒαžΆαžŠαŸ‚αž›αž˜αžΆαž“αž–αž“αŸ’αž›αžΊαžαŸ’αž„αŸƒαŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‡αžΆαž˜αž½αž™ Get-View αžŸαžΌαž˜αž™αž€ Get-VM cmdletαŸ– αžœαžΆαž…αžΌαž›αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž αž αžΎαž™αžαŸ’αžšαž‘αž”αŸ‹αžœαžαŸ’αžαž»αž•αŸ’αžŸαŸ† αž–αŸ„αž›αž‚αžΊαžœαžΆαž—αŸ’αž‡αžΆαž”αŸ‹αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ…αžœαžΆαŸ– VMHost, Datastore αž‡αžΆαžŠαžΎαž˜αŸ”  

Get-View αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž“αŸ’αž›αŸ‚αž„αžšαž”αžŸαŸ‹αžœαžΆαž˜αž·αž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‘αŸ…αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž”αžΆαž“αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αŸ„αŸ‡αž‘αŸαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž™αŸ‰αžΆαž„αžαžΉαž„αžšαŸ‰αžΉαž„αž“αžΌαžœαž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš αžŠαŸ‚αž›αž“αžΉαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžαŸ’αžαž»αž‘αž·αž“αŸ’αž“αž•αž›αž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ Windows Server αž‡αžΆαž‘αžΌαž‘αŸ… αž“αž·αž„αž“αŸ…αž€αŸ’αž“αž»αž„ Hyper-V αž‡αžΆαž–αž·αžŸαŸαžŸ Get-WMIObject cmdlet αž‚αžΊαž‡αžΆ analogue αž•αŸ’αž‘αžΆαž›αŸ‹ - αž‚αŸ†αž“αž·αžαž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘αŸ”

Get-View αž˜αžΆαž“αž€αžΆαžšαžšαž’αžΆαž€αŸ‹αžšαž’αž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž”αŸ’αžšαž…αžΆαŸ†αž›αžΎαžœαžαŸ’αžαž»αž…αŸ†αžŽαž»αž…αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž”αžΎβ€‹αž“αž·αž™αžΆαž™β€‹αžŠαž›αŸ‹β€‹αžœαžαŸ’αžαž»β€‹αžšαžΆαž”αŸ‹β€‹αž–αžΆαž“αŸ‹β€‹αžšαžΆαž”αŸ‹β€‹αž˜αŸ‰αžΊαž“β€‹αž“αŸ„αŸ‡β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž‘αŸαŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ…αž›αžΎαž”αŸ’αž›αž€αŸ‹ VMwareαŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈ Get-View

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž’αŸ’αž“αž€αž“αžΌαžœαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžšαžŽαžΈαž–αž·αžαŸ” 

αžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαžΎαž˜αŸ’αž”αžΈαžŠαž€ VM

αžαŸ’αž„αŸƒαž˜αž½αž™ αž˜αž·αžαŸ’αžαžšαž½αž˜αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž»αŸ†αž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αŸ” αž—αžΆαžšαž€αž·αž…αŸ’αž…αž‚αžΊαž‡αžΆαž‘αž˜αŸ’αž›αžΆαž”αŸ‹αž‘αžΌαž‘αŸ…αŸ– αžŸαŸ’αžœαŸ‚αž„αžšαž€ VM αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš cloud.uuid αžŸαŸ’αž‘αž½αž“ (αž”αžΆαž‘ αžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αž“αŸ…αž–αŸαž›αž€αŸ’αž›αžΌαž“ VM αž“αŸ…αž€αŸ’αž“αž»αž„ vCloud Director)αŸ” 

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αž·αžαž‚αžΊαŸ–

  1. αž‘αž‘αž½αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΈαž“αŸƒ VMs αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
  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

ៀ αž“αžΆαž‘αžΈ ៣០ αžœαž·αž“αžΆαž‘αžΈ αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‘αžΎαžšαžαŸ‚ 10k VMs αŸ” αž”αŸ’αžšαžΆαž€αŸ‹αžšαž„αŸ’αžœαžΆαž“αŸ‹αž‚αžΊαž’αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαžαž˜αŸ’αžšαž„ αž“αž·αž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαžαž˜αŸ’αžšαŸ€αž”αž›αž‘αŸ’αž’αž•αž›αžŠαŸ„αž™αžŠαŸƒαŸ” αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αžΆαž˜αž‘αžΆαžšαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αŸ”

Runspaces αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ†αž”αžΌαž„αž‚αŸαžŠαŸ‚αž›αž˜αž€αž‡αž½αž™αžŸαž„αŸ’αž‚αŸ’αžšαŸ„αŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“ host metrics αž–αžΈ 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 key)αŸ–

$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 $_
           }
       }
   }

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž…αžΌαžšαž™αžΎαž„αž’αž“αž»αžœαžαŸ’αž multithreading αžαžΆαž˜αžšαž™αŸˆ Runspace PoolsαŸ”  

αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  1. αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΈ VMs αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
  2. αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αž‘αŸ’αžšαžΈαž˜αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“ cloud.uuid αŸ”
  3. αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžŸαŸ’αž‘αŸ’αžšαžΈαž˜αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžαŸ’αžαž»αž˜αž½αž™αŸ”
  4. αž™αžΎαž„αžαŸ’αžšαž„αžœαžαŸ’αžαž»αžŠαŸ„αž™αžŠαžΆαž€αŸ‹αž‡αžΆαž€αŸ’αžšαž»αž˜αžŠαŸ„αž™αžαž˜αŸ’αž›αŸƒαž“αŸƒαžœαžΆαž› CloudUUIDαŸ– αž’αŸ’αž“αž€αžŠαŸ‚αž›αž…αŸ†αž“αž½αž“αž“αŸƒαžαž˜αŸ’αž›αŸƒαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαž’αŸ†αž‡αžΆαž„ 1 αž‚αžΊαž‡αžΆ VM αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αž‚αŸ’αžšαžΈαž”αŸ–


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

៧្០០០ αžœαž·αž“αžΆαž‘αžΈαŸ” αžœαžΆαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž“αŸ…αžαŸ‚αž’αžΆαž…αž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αŸ” 

αž…αžΌαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‘αŸ…αž›αŸ’αž”αžΏαž“αž‘αžΈαž–αžΈαžš: GetView

αžαŸ„αŸ‡αžšαž€αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαž»αžŸαŸ”
αžŠαŸ†αž”αžΌαž„ αž“αž·αž„αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αž Get-VM cmdlet αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αž™αžΌαžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ”
αž‘αžΈαž–αžΈαžš Get-AdvancedOptions cmdlet αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αž™αžΌαžšαž‡αžΆαž„αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αž”αŸ‹αŸ”
αž…αžΌαžšαž™αžΎαž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž‘αžΈαž–αžΈαžšαž‡αžΆαž˜αž»αž“αžŸαž·αž“αŸ” 

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 αžŠαŸαž˜αž αž·αž˜αžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžšαžˆαŸ’αž˜αŸ„αŸ‡ VM αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž“αŸƒαž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαž›αŸ’αž”αž·αž…?  

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž§αž”αžŸαž‚αŸ’αž‚αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ Get-AdvancedOptions αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αž–αžΈαžŸαŸ’αž‚αŸ’αžšαžΈαž”αŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Runspace Pools αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž αžΆαž€αŸ‹αž”αžΈαžŠαžΌαž…αž‡αžΆαž‡αŸ’αžšαž»αž›αž αž½αžŸαž αŸαžαž» αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž›αŸ‚αž„αž˜αžΆαž“αžαŸ†αžšαžΌαžœαž€αžΆαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž€αž·αž…αŸ’αž…αž€αžΆαžšαž™αžΊαž αŸ— αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž›αžΆαž™αž“αŸ…αž–αŸαž›αž”αŸ’αžšαž‚αž›αŸ‹αžœαž‚αŸ’αž‚αž˜αž½αž™αŸ” αž§αž”αž€αžšαžŽαŸαž‚αžΊαž›αŸ’αž’αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžšαžŽαžΈαž“αŸαŸ‡αž‘αŸαŸ” 

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αž“αŸƒ ExtensionDataαŸ– αžœαžΆαž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αŸ’αžšαŸ…αž–αžΈ Get-View object αž“αŸ„αŸ‡αž‘αŸαŸ” 

αž…αžΌαžšβ€‹αž αŸ…β€‹αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸβ€‹αž”αž»αžšαžΆαžŽβ€‹αžšαž”αžŸαŸ‹β€‹αž…αŸ…αž αŸ’αžœαžΆαž™αž“αžΆαž™ 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 αžœαž·αž“αžΆαž‘αžΈ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžαŸ’αžαž»αž‡αž·αž 10k αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžαŸ’αžšαž„αžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αŸ” αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™!

αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αž˜αž½αž™

αž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž§αž”αž€αžšαžŽαŸαŸ” αž‡αžΆαžšαžΏαž™αŸ—αžœαžΆαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž“αž·αž™αžΆαž™αž±αŸ’αž™αž”αŸ’αžšαžΆαž€αžŠαžαžΆαžαžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αžœαžΆαž”αžΆαž“αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž”αžΆαž“αžšαžΆαž™αž”αž‰αŸ’αž‡αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‚αžΊαž›αŸ’αž’αž€αŸ’αž“αž»αž„αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž”αžŸαŸ‹αžœαžΆαŸ” αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž€αŸ’αž“αž»αž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸαž›αŸ†αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜ αž“αž·αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

PS: αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαžŸαž˜αžΆαž‡αž·αž€αžŸαž αž‚αž˜αž“αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αŸ†αž“αž½αž™ αž“αž·αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž’αžαŸ’αžαž”αž‘αŸ” αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž’αŸ’αž“αž€αžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ’αžšαž‰αžΆαŸ†αŸ” αž αžΎαž™αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž’αŸ’αž“αž€αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž‡αžΎαž„αžŠαžΌαž…αž‡αžΆ boa constrictor αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹