เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบปเบงโ€‹เป€เบชเบตเบกโ€‹เบฅเบนเบโ€‹เบชเบญเบ™โ€‹เป„เบŸโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบชเบฐโ€‹เบ„เบดเบš PowerCLIโ€‹ 

เบšเปเปˆเบ”เบปเบ™ เบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบš VMware เปƒเบ”เบเปเปˆเบกเบฒเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปœเป‰เบฒเบ—เบตเปˆเบ›เบฐเบˆเบณเบงเบฑเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบกเบฑเบ™เบ—เบฑเบ‡เปเบปเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเป€เบชเบฑเป‰เบ™เบ„เบณเบชเบฑเปˆเบ‡, เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฒ PowerShell เบซเบผเบท VMware PowerCLI.

เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบŠเปเบฒเบ™เบดเบŠเปเบฒเบ™เบฒเบ™ PowerShell เป€เบฅเบฑเบเบ™เป‰เบญเบเบเบงเปˆเบฒเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง ISE เปเบฅเบฐเปƒเบŠเป‰ cmdlets เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบˆเบฒเบเป‚เบกเบ”เบนเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ "เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ magic". เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบ™เบฑเบšเป€เบ„เบทเปˆเบญเบ‡ virtual เปƒเบ™เบซเบผเบฒเบเบฎเป‰เบญเบ, เบ—เปˆเบฒเบ™เบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบงเปˆเบฒ scripts เบ—เบตเปˆเบŠเปˆเบงเบเบญเบญเบเปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปเบฅเปˆเบ™เบŠเป‰เบฒเบฅเบปเบ‡เบขเปˆเบฒเบ‡เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. 

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ™เบตเป‰, 2 เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบˆเบฐเบŠเปˆเบงเบเบญเบญเบ:

  • PowerShell Runspaces - เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบ™เบฒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ™เบเบฐเบ—เบนเป‰เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ; 
  • Get-View โ€“ เบŸเบฑเบ‡เบŠเบฑเบ™ PowerCLI เบžเบทเป‰เบ™เบ–เบฒเบ™, เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡ Get-WMIObject เปƒเบ™ Windows. cmdlet เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ”เบถเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™, เปเบ•เปˆเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบกเบตเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ. เปƒเบ™เบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบตเบกเบฑเบ™เบญเบญเบเบกเบฒเป„เบง.

เบ•เปเปˆเป„เบ›, เบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบชเบฑเป‰เบ™เป†เบเปˆเบฝเบงเบเบฑเบšเปเบ•เปˆเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบฅเบฐเบชเบฐเปเบ”เบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰. เบ‚เปเปƒเบซเป‰เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ„เบดเบšเบชเบฐเป€เบžเบฒเบฐเปเบฅเบฐเป€เบšเบดเปˆเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ”เบตเบเปˆเบงเบฒเบ•เบปเบงเบญเบทเปˆเบ™. เป„เบ›!

เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบปเบงโ€‹เป€เบชเบตเบกโ€‹เบฅเบนเบโ€‹เบชเบญเบ™โ€‹เป„เบŸโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบชเบฐโ€‹เบ„เบดเบš PowerCLIโ€‹

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”: Runspace

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, Runspace เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบ‚เบฐเบซเบ™เบฒเบ™เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ™เบญเบเป‚เบกเบ”เบนเบ™เบ•เบปเป‰เบ™เบ•เป. เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เบ•เบปเบงเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบทเปˆเบ™เบ—เบตเปˆเบˆเบฐเบเบดเบ™เป€เบ–เบดเบ‡เบšเบฒเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เป‚เบ›เป€เบŠเบ”เป€เบŠเบต, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ–เป‰เบฒเบชเบฐเบ„เบดเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเปˆเบ™เปƒเบ™เบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบตเปเบฅเบฐเบเบดเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ gigabyte, เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ Runspace. เปเบ•เปˆเบชเปเบฒเบฅเบฑเบš scripts เบชเปเบฒเบฅเบฑเบšเบชเบดเบšเบžเบฑเบ™เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเบ™เบตเป‰: 
เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ™เบณเปƒเบŠเป‰ PowerShell Runspaces: เบžเบฒเบเบ—เบต 1

เบเบฒเบ™เปƒเบŠเป‰ Runspace เปƒเบซเป‰เบซเบเบฑเบ‡:

  • เบ„เบงเบฒเบกเป„เบงเป‚เบ”เบเบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”,
  • เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ™โ€‹,
  • เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž.

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เป€เบกเบทเปˆเบญ Runspace เบŠเปˆเบงเบ:

"เบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ•เบปเบงเบŠเบตเป‰เบšเบญเบเบ—เบตเปˆเบเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฒเบกเปƒเบ™ vSphere. เบžเบฒเบเปƒเบ™ vCenter, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เป€เบšเบดเปˆเบ‡เบงเปˆเบฒ VM เปƒเบ”เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เป‚เบŠเบเบ”เบตเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบเบณเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เป„เบ”เป‰เบžเบฒเบเปƒเบ™เบ™เบฒเบ—เบต เบ‚เบญเบšเปƒเบˆ PowerShell.
เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเปเบšเปˆเบ‡เบ›เบฑเบ™เบชเบฐเบ„เบดเบšเบ—เบตเปˆเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบš VMware เบชเบฒเบกเบฒเบ”เบ„เบปเป‰เบ™เบซเบฒเป„เบ”เป‰เป„เบงเปƒเบ™เบ—เบปเปˆเบง vCenter เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ VM เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.  
เบชเบฐเบ„เบฃเบดเบšเปƒเบŠเป‰ PowerShell runspaces เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ•เปˆเบฅเบฐเป€เบˆเบปเป‰เบฒเบžเบฒเบš ESXi เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบˆเบฒเบ VMs เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เปƒเบ™ Runspace เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบฅเบฐเบฅเบฒเบเบ‡เบฒเบ™เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบ—เบฑเบ™เบ—เบต. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ PowerShell เบ›เบดเบ”เบงเบฝเบเบ—เบฑเบ™เบ—เบต, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบœเปˆเบฒเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเปเบฅเบฐเบฅเปเบ–เป‰เบฒเปƒเบซเป‰เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เป€เบฎเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบกเบฑเบ™."

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: เบงเบดเบ—เบตเบเบฒเบ™เบชเบฐเปเบ”เบ‡ Virtual Machine I/O เปƒเบ™ Dashboard ESXi

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, Runspace เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เบญเบตเบเบ•เปเปˆเป„เบ›:

"เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเบ‚เบฝเบ™เบชเบฐเบ„เบดเบšเบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบˆเบฒเบ VM เปเบฅเบฐเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆเป€เบกเบทเปˆเบญเบˆเปเบฒเป€เบ›เบฑเบ™. เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบกเบต VM เบซเบผเบฒเบ, เปเบฅเบฐ 5-8 เบงเบดเบ™เบฒเบ—เบตเปเบกเปˆเบ™เปƒเบŠเป‰เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ”เบฝเบง." 

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: Multithreading PowerCLI เบเบฑเบš RunspacePool

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ Get-View, เปƒเบซเป‰เป€เบฎเบปเบฒเบเป‰เบฒเบงเบ•เปเปˆเป„เบ›. 

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเบชเบญเบ‡: Get-View

เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡ Get-View เบˆเบถเปˆเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒ cmdlets เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบ™เบงเปƒเบ”. 

Cmdlets เปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเป‚เบ”เบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบถเบเบชเบฒเบ›เบทเป‰เบกเบญเป‰เบฒเบ‡เบญเบตเบ‡ API เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบฅเปเป‰เบ•เปเปˆเป„เบ›. เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เป„เบซเบกโ€‹เบเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบฎเป‰เบญเบโ€‹เบซเบผเบทโ€‹เบชเบญเบ‡โ€‹เปเบ–เบงโ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹, PowerShell เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เบ”เป‰เบงเบโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹. เบžเบงเบเป€เบฎเบปเบฒเบˆเปˆเบฒเบเบ„เปˆเบฒเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบ™เบตเป‰เบ”เป‰เบงเบเบ„เบงเบฒเบกเป„เบง. เบšเปเปˆเบกเบต magic เบžเบฒเบเปƒเบ™ cmdlets เบ•เบปเบ™เป€เบญเบ‡: script เบ”เบฝเบงเบเบฑเบ™, เปเบ•เปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ, เบ‚เบฝเบ™เป‚เบ”เบเบกเบทเบŠเปเบฒเบ™เบดเบŠเปเบฒเบ™เบฒเบ™เบ‚เบญเบ‡เปเบกเปˆเบšเบปเบ”เบˆเบฒเบเบšเปˆเบญเบ™เบกเบตเปเบ”เบ”เบญเบดเบ™เป€เบ”เบ.

เบ”เบฝเบงเบ™เบตเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš Get-View, เปƒเบซเป‰เป€เบญเบปเบฒ Get-VM cmdlet: เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบงเบฑเบ”เบ–เบธเบ›เบฐเบชเบปเบก, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบฑเบ™เปเบ™เบšเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบญเบทเปˆเบ™เป†เบเบฑเบšเบกเบฑเบ™: VMHost, Datastore, เปเบฅเบฐเบญเบทเปˆเบ™เป†.  

Get-View เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบžเบตเปˆเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบเบฑเบšเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบงเบฑเบ”เบ–เบธเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™. เปƒเบ™ Windows Server เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเปƒเบ™ Hyper-V เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, Get-WMIObject cmdlet เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเป‚เบ”เบเบเบปเบ‡ - เบ„เบงเบฒเบกเบ„เบดเบ”เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™.

Get-View เปเบกเปˆเบ™เบšเปเปˆเบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ›เบปเบเบเบฐเบ•เบดเบเปˆเบฝเบงเบเบฑเบšเบงเบฑเบ”เบ–เบธเบˆเบธเบ”. โ€‹เปเบ•เปˆโ€‹เป€เบกเบทเปˆเบญโ€‹เป€เบงเบปเป‰เบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบงเบฑเบ”เบ–เบธโ€‹เบžเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบžเบฑเบ™โ€‹เปเบทเปˆเบ™โ€‹เบญเบฑเบ™โ€‹เบเปโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบฅเบฒเบ„เบฒ.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš blog VMware: เปเบ™เบฐเบ™เบณเบเปˆเบฝเบงเบเบฑเบš Get-View

เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™เบ—เบธเบเบขเปˆเบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. 

เบเบฒเบ™เบ‚เบฝเบ™เบชเบฐเบ„เบฃเบดเบšเป€เบžเบทเปˆเบญเบเบปเบเป€เบฅเบตเบเบเบฒเบ™เป‚เบซเบผเบ” VM

เบกเบทเป‰เบซเบ™เบถเปˆเบ‡เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบ‚เปเปƒเบซเป‰เบ‚เป‰เบญเบเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบฐเบ„เบดเบšเบ‚เบญเบ‡เบฅเบฒเบง. เบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบปเปˆเบงเป„เบ›: เบŠเบญเบเบซเบฒ VMs เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต cloud.uuid เบŠเป‰เปเบฒเบเบฑเบ™ (เปเบกเปˆเบ™, เบ™เบตเป‰เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ cloning VM เปƒเบ™ vCloud Director). 

เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบขเบนเปˆเปƒเบ™เปƒเบˆเปเบกเปˆเบ™:

  1. เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ VMs เบ—เบฑเบ‡เบซเบกเบปเบ”.
  2. เบงเบดเป€เบ„เบฒเบฐเบฅเบฒเบเบŠเบทเปˆเบšเบฒเบ‡เบงเบดเบ—เบต.

เบชเบฐเบšเบฑเบšเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเปเบกเปˆเบ™ script เบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰:

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
}
# ะ”ะฐะปะตะต ะ ะฃะšะะœะ˜ ะฟะฐั€ัะธะผ ะฟะพะปัƒั‡ะตะฝะฝั‹ะน ั€ะตะทัƒะปัŒั‚ะฐั‚

เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเบˆเบฐเปเบˆเป‰เบ‡. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰เปƒเบ™เบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบตเบ”เป‰เบงเบเบเบฒเบ™เบžเบฑเบเบœเปˆเบญเบ™เบเบฒเป€เบŸ. screw เบชเบธเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบฅเบฐเบกเบฑเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เปเบ•เปˆเปƒเบซเป‰เบงเบฑเบ”เปเบ—เบเป€เบงเบฅเบฒ:

เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบปเบงโ€‹เป€เบชเบตเบกโ€‹เบฅเบนเบโ€‹เบชเบญเบ™โ€‹เป„เบŸโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบชเบฐโ€‹เบ„เบดเบš PowerCLIโ€‹

เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบปเบงโ€‹เป€เบชเบตเบกโ€‹เบฅเบนเบโ€‹เบชเบญเบ™โ€‹เป„เบŸโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบชเบฐโ€‹เบ„เบดเบš PowerCLIโ€‹

2 เบ™เบฒเบ—เบต 47 เบงเบดเบ™เบฒเบ—เบต เป€เบกเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป€เบเบทเบญเบš 10k VMs. เป‚เบšเบ™เบฑเบ”เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบ•เบปเบงเบเบญเบ‡ เปเบฅเบฐเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เปเบ™เปˆเบ™เบญเบ™, script เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš.

Runspaces เป€เบ›เบฑเบ™เบœเบนเป‰เบ—เบณเบญเบดเบ”เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเบŠเปˆเบงเบเบŠเบตเบงเบดเบ” เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบฑเบšเป€เบญเบปเบฒ host metrics เบˆเบฒเบ vCenter เบžเป‰เบญเบกเป†เบเบฑเบ™ เบซเบผเบทเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบงเบฑเบ”เบ–เบธเบซเบผเบฒเบเบชเบดเบšเบžเบฑเบ™เบญเบฑเบ™. เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบญเบปเบฒเบกเบฒเปƒเบซเป‰เบซเบเบฑเบ‡.

เป€เบ›เบตเบ”เบ„เบงเบฒเบกเป„เบงเบ—เบณเบญเบดเบ”: PowerShell Runspaces

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เปƒเบˆเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ„เบดเบšเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ loop เบšเปเปˆเป„เบ”เป‰เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš, เปเบ•เปˆเปƒเบ™เบเบฐเบ—เบนเป‰เบ‚เบฐเบซเบ™เบฒเบ™, เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบฑเบ”เบ–เบธเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบกเบฑเบ™. 

เปเบ•เปˆเบกเบตเบšเบฑเบ™เบซเบฒ: 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 $_
           }
       }
   }

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ” multithreading เบœเปˆเบฒเบ™ Runspace Pools.  

เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบกเบตเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

  1. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ VMs เบ—เบฑเบ‡เบซเบกเบปเบ”.
  2. เปƒเบ™เบเบฐเปเบชเบ‚เบฐเบซเบ™เบฒเบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš cloud.uuid.
  3. เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบชเบฒเบเบ™เป‰เปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบฑเบ”เบ–เบธเบ”เบฝเบง.
  4. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเปˆเบ™เบ•เบญเบ‡เบงเบฑเบ”เบ–เบธเป‚เบ”เบเบเบฒเบ™เบˆเบฑเบ”เบเบธเปˆเบกเป‚เบ”เบเบ„เปˆเบฒเบ‚เบญเบ‡เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก CloudUUID: เบœเบนเป‰เบ—เบตเปˆเบˆเปเบฒเบ™เบงเบ™เบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบซเบผเบฒเบเบเปˆเบงเบฒ 1 เปเบกเปˆเบ™ VM เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš script:


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 cmdlet เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”.
เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, cmdlet Get-AdvancedOptions เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบชเปเบฒเป€เบฅเบฑเบ”.
เปƒเบซเป‰เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบญเบฑเบ™เบ—เบตเบชเบญเบ‡เบเปˆเบญเบ™. 

Get-AdvancedOptions เปเบกเปˆเบ™เบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบงเบฑเบ”เบ–เบธ VM เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เปเบ•เปˆ clumsy เบซเบผเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบงเบฑเบ”เบ–เบธเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบˆเบฒเบเบงเบฑเบ”เบ–เบธ virtual machine เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡ (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 เบ”เบฝเบงเบ™เบตเป‰เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเบ•เบฒเบเป€เบเบตเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฐเบซเบ™เบฒเบ™เบเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบŠเป‰เบฒเป†เปƒเบ™เบ—เบปเปˆเบงเบเบฐเบ—เบนเป‰ squat เปƒเบ™เป€เบงเบฅเบฒเบชเบปเปˆเบ‡เบ•เปเปˆเบเบญเบ‡เบ›เบฐเบŠเบธเบก. เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบกเปˆเบ™เบ”เบต, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบ™เบตเป‰. 

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡ 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 เบงเบดเบ™เบฒเบ—เบต เบชเปเบฒเบฅเบฑเบšเป€เบเบทเบญเบš 10k เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบกเบตเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เป‚เบ”เบเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เบเบดเปˆเบ‡เปƒเบซเบเปˆ!

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบซเบฅเบธเบšเป„เบ”เป‰

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบท. เบกเบฑเบ™เบกเบฑเบเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเปƒเบซเป‰เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบฅเบทเบญเบเป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบกเบฑเบ™. เปเบ•เปˆเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบชเบฐเบ„เบดเบšเปเบกเปˆเบ™เบ”เบตเบขเบนเปˆเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบกเบฑเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบ™เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปƒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

PS: เบœเบนเป‰เบ‚เบฝเบ™เบ‚เปเบ‚เบญเบšเปƒเบˆเบชเบฐเบกเบฒเบŠเบดเบเบŠเบธเบกเบŠเบปเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเปเบฅเบฐเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบเบฒเบ™เบเบฐเบเบฝเบกเบšเบปเบ”เบ„เบงเบฒเบก. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบœเบนเป‰เบ—เบตเปˆเบกเบต paws. เปเบฅเบฐโ€‹เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบœเบนเป‰โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ‚เบฒโ€‹, เป€เบŠเบฑเปˆเบ™โ€‹: boa constrictorโ€‹.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™