ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ ืึท ืจืึทืงืขื˜ ื‘ื•ืกื˜ืขืจ ืคึฟืึทืจ PowerCLI ืกืงืจื™ืคึผืก 

ื’ื™ื›ืขืจ ืึธื“ืขืจ ืฉืคึผืขื˜ืขืจ, ืงื™ื™ืŸ VMware ืกื™ืกื˜ืขื ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ ืงื•ืžื˜ ืฆื• ืึธื˜ืึทืžื™ื™ื˜ ืจื•ื˜ื™ืŸ ื˜ืึทืกืงืก. ืขืก ืึทืœืข ืกื˜ืึทืจืฅ ืžื™ื˜ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื”, ื“ืขืจื ืึธืš ืงื•ืžื˜ PowerShell ืึธื“ืขืจ VMware PowerCLI.

ื–ืืœ ืก ื–ืึธื’ืŸ ืื™ืจ ื”ืึธื‘ืŸ ืžืึทืกื˜ืขืจื“ PowerShell ืึท ื‘ื™ืกืœ ืžืขืจ ื•ื•ื™ ืงืึทื˜ืขืจ ISE ืื•ืŸ ื ื™ืฆืŸ ื ืึธืจืžืึทืœ ืงืžื“ืœืขืฅ ืคื•ืŸ ืžืึทื“ื–ืฉื•ืœื– ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืจืขื›ื˜ ืฆื• "ืขื˜ืœืขื›ืข ืžื™ืŸ ืคื•ืŸ ืžืึทื’ื™ืฉ". ื•ื•ืขืŸ ืื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืฆื™ื™ืœืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ืื™ืŸ ื“ื™ ื”ื•ื ื“ืขืจื˜ืขืจ, ืื™ืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ืึทื– ืกืงืจื™ืคึผืก ื•ื•ืึธืก ื”ืขืœืคึฟืŸ ื–ื™ืš ืื•ื™ืฃ ืึท ืงืœื™ื™ืŸ ื•ื•ืึธื’ ืœื•ื™ืคืŸ ื ืึธื•ื˜ื™ืกืึทื‘ืœื™ ืกืœืึธื•ืขืจ ืื•ื™ืฃ ืึท ื’ืจื•ื™ืก ื•ื•ืึธื’. 

ืื™ืŸ ื“ืขื ืกื™ื˜ื•ืึทืฆื™ืข, 2 ืžื›ืฉื™ืจื™ื ื•ื•ืขื˜ ื”ืขืœืคืŸ:

  • PowerShell Runspaces - ืึท ืฆื•ื’ืึทื ื’ ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืคึผืึทืจืึทืœืขืœื™ื–ื™ืจืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ืคึผืจืึทืกืขืกืึทื– ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืคึฟืขื“ืขื; 
  • ื‘ืึทืงื•ืžืขืŸ-View - ืึท ื™ืงืขืจื“ื™ืง PowerCLI ืคื•ื ืงืฆื™ืข, ืึทืŸ ืึทื ืึทืœืึธื’ ืคื•ืŸ Get-WMIObject ืื™ืŸ Windows. ื“ืขื ืงืžื“ืœืขื˜ ื˜ื•ื˜ ื ื™ืฉื˜ ืฆื™ืขืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืึทืงืึทืžืคึผืึทื ื™ื™ื ื’ ืขื ื˜ื™ื˜ื™ื–, ืึธื‘ืขืจ ื ืขืžื˜ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึท ืคึผืฉื•ื˜ ื›ื™ื™ืคืขืฅ ืžื™ื˜ ืคึผืฉื•ื˜ ื“ืึทื˜ืŸ ื˜ื™ื™ืคึผืก. ืื™ืŸ ืคื™ืœืข ืงืึทืกืขืก ืขืก ืงื•ืžื˜ ืื•ื™ืก ืคืึทืกื˜ืขืจ.

ื“ืขืจื ืึธืš, ืื™ืš ื•ื•ืขืœ ื‘ืขืงื™ืฆืขืจ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื™ืขื“ืขืจ ื’ืขืฆื™ื™ึทื’ ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื ื•ืฆืŸ. ืœืึธืžื™ืจ ืึทื ืึทืœื™ื™ื– ืกืคึผืขืฆื™ืคื™ืฉ ืกืงืจื™ืคึผืก ืื•ืŸ ื–ืขืŸ ื•ื•ืขืŸ ืื™ื™ื ืขืจ ืึทืจื‘ืขื˜ ื‘ืขืกืขืจ ื•ื•ื™ ื“ื™ ืื ื“ืขืจืข. ื’ื™ื™!

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ ืึท ืจืึทืงืขื˜ ื‘ื•ืกื˜ืขืจ ืคึฟืึทืจ PowerCLI ืกืงืจื™ืคึผืก

ืขืจืฉื˜ืขืจ ื‘ื™ื ืข: Runspace

ืึทื–ื•ื™, Runspace ืื™ื– ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ืคึผืึทืจืึทืœืขืœ ืคึผืจืึทืกืขืกื™ื ื’ ืคื•ืŸ ื˜ืึทืกืงืก ืึทืจื•ื™ืก ื“ื™ ื”ื•ื™ืคึผื˜ ืžืึธื“ื•ืœืข. ืคื•ืŸ ืงื•ืจืก, ืื™ืจ ืงืขื ืขืŸ ืงืึทื˜ืขืจ ืืŸ ืื ื“ืขืจ ืคึผืจืึธืฆืขืก ื•ื•ืึธืก ื•ื•ืขื˜ ืขืกืŸ ืขื˜ืœืขื›ืข ื–ื›ึผืจื•ืŸ, ืคึผืจืึทืกืขืกืขืจ, ืืื–"ื• ื•. ืื•ื™ื‘ ื“ื™ื™ืŸ ืฉืจื™ืคื˜ ืœื•ื™ืคื˜ ืื™ืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ืžื™ื ื•ื˜ ืื•ืŸ ืงืึทื ืกื•ืžื– ืึท ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ ื–ื›ึผืจื•ืŸ, ืจื•ื‘ึฟ ืžืกืชึผืžื ืื™ืจ ื•ื•ืขื˜ ื ื™ืฉื˜ ื“ืึทืจืคึฟืŸ ืจื•ื ืกืคึผืึทืกืข. ืึธื‘ืขืจ ืคึฟืึทืจ ืกืงืจื™ืคึผืก ืคึฟืึทืจ ืฆืขื ื“ืœื™ืงืขืจ ื˜ื•ื™ื–ื ื˜ืขืจ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืก ืขืก ืื™ื– ื“ืืจืฃ.

ืื™ืจ ืงืขื ืขืŸ ืึธื ื”ื™ื™ื‘ืŸ ืœืขืจื ืขืŸ ื“ืึธ: 
ืึธื ื”ื™ื™ื‘ ื ื•ืฆืŸ ืคื•ืŸ PowerShell Runspaces: ื˜ื™ื™ืœ 1

ื•ื•ืึธืก ื˜ื•ื˜ ื ื™ืฆืŸ Runspace ื’ืขื‘ืŸ:

  • ื’ื™ื›ืงื™ื™ึทื˜ ื“ื•ืจืš ืœื™ืžืึทื˜ื™ื ื’ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืงืึทืžืึทื ื“ื–,
  • ืคึผืึทืจืึทืœืขืœ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ื˜ืึทืกืงืก,
  • ื–ื™ื›ืขืจืงื™ื™ึทื˜.

ื“ืึธ ืื™ื– ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ื“ื™ ืื™ื ื˜ืขืจื ืขื˜ ื•ื•ืขืŸ Runspace ื”ืขืœืคึผืก:

"ืกื˜ืึธืจื™ื“ื–ืฉ ืงืึทื ื˜ืขื ืฉืึทืŸ ืื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื›ืึทืจื“ืึทืกื˜ ืžืขื˜ืจื™ืงืก ืฆื• ืฉืคึผื•ืจ ืื™ืŸ vSphere. ื™ืŸ vCenter, ืื™ืจ ืงืขื ื˜ ื ื™ืฉื˜ ื ืึธืจ ื’ื™ื™ืŸ ืื•ืŸ ื–ืขืŸ ื•ื•ืึธืก VM ืงืึทื ืกื•ืžื™ื ื’ ืžืขืจ ืกื˜ืึธืจื™ื“ื–ืฉ ืจืขืกื•ืจืกืŸ. ืฆื•ืž ื’ืœื™ืง, ืื™ืจ ืงืขื ืขืŸ ืงืœื™ื™ึทื‘ืŸ ื“ื™ ื“ืึทื˜ืŸ ืื™ืŸ ืžื™ื ื•ื˜ ื“ืึทื ืง ืฆื• PowerShell.
ืื™ืš ื•ื•ืขืœ ื˜ื™ื™ืœืŸ ืึท ืฉืจื™ืคื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ VMware ืกื™ืกื˜ืขื ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจืก ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ื–ื•ื›ืŸ ืื™ื‘ืขืจ vCenter ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ VMs ืžื™ื˜ ื“ืึทื˜ืŸ ื•ื•ืขื’ืŸ ื–ื™ื™ืขืจ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš ืงืึทื ืกืึทืžืฉืึทืŸ.  
ื“ืขืจ ืฉืจื™ืคื˜ ื ื™ืฆื˜ PowerShell runspaces ืฆื• ืœืึธื–ืŸ ื™ืขื“ืขืจ ESXi ื‘ืึทืœืขื‘ืึธืก ืฆื• ื–ืึทืžืœืขืŸ ืงืึทื ืกืึทืžืฉืึทืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืคึฟื•ืŸ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข VMs ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ Runspace ืื•ืŸ ื’ืœื™ื™ืš ื‘ืึทืจื™ื›ื˜ ืงืึทืžืคึผืœื™ืฉืึทืŸ. ื“ืึธืก ืึทืœืึทื•ื– PowerShell ืฆื• ืคืึทืจืžืึทื›ืŸ ื“ื–ืฉืึธื‘ืก ื’ืœื™ื™ืš, ืืœื ื•ื•ื™ ื™ื˜ืขืจื™ื™ื˜ื™ื ื’ ื“ื•ืจืš ืžื—ื ื•ืช ืื•ืŸ ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ื™ืขื“ืขืจ ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ ื–ื™ื™ืŸ ื‘ืงืฉื”.

ืžืงื•ืจ: ื•ื•ื™ ืฆื• ื•ื•ื™ื™ึทื–ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื™ / ืึธ ืื•ื™ืฃ ืึทืŸ ESXi ื“ืึทืฉื‘ืึธืจื“

ืื™ืŸ ื“ืขื ืคืึทืœ ืื•ื ื˜ืŸ, Runspace ืื™ื– ื ื™ื˜ ืžืขืจ ื ื•ืฆื™ืง:

"ืื™ืš ื‘ื™ืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึท ืฉืจื™ืคื˜ ื•ื•ืึธืก ืงืึทืœืขืงืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืึท VM ืื•ืŸ ืฉืจื™ื™ื‘ื˜ ื ื™ื™ึทืข ื“ืึทื˜ืŸ ื•ื•ืขืŸ ื ื™ื™ื˜ื™ืง. ื“ืขืจ ืคึผืจืึธื‘ืœืขื ืื™ื– ืึทื– ืขืก ื–ืขื ืขืŸ ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ VMs, ืื•ืŸ 5-8 ืกืขืงื•ื ื“ืขืก ื–ืขื ืขืŸ ืคืืจื‘ืจืื›ื˜ ืื•ื™ืฃ ืื™ื™ืŸ ืžืึทืฉื™ืŸ. 

ืžืงื•ืจ: Multithreading PowerCLI ืžื™ื˜ RunspacePool

ื“ืึธ ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ื‘ืึทืงื•ืžืขืŸ-View, ืœืึธื–ืŸ ืื•ื ื“ื– ืžืึทืš ืื•ื™ืฃ. 

ืฆื•ื•ื™ื™ื˜ืข ื‘ื™ื ืข: ื‘ืึทืงื•ืžืขืŸ-View

ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ืึธืก Get-View ืื™ื– ื ื•ืฆื™ืง, ืขืก ืื™ื– ื•ื•ืขืจื˜ ืฆื• ื’ืขื“ืขื ืงืขืŸ ื•ื•ื™ ืงืžื“ืœืขืฅ ืึทืจื‘ืขื˜ ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ. 

Cmdlets ื–ืขื ืขืŸ ื“ืืจืฃ ืฆื• ืงืึทื ื•ื•ื™ื ื™ืึทื ื˜ืœื™ ื‘ืึทืงื•ืžืขืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืึธืŸ ื“ื™ ื ื•ื™ื˜ ืฆื• ืœืขืจื ืขืŸ ืึทืคึผื™ ืจืขืคึฟืขืจืขื ืฅ ื‘ื™ื›ืขืจ ืื•ืŸ ืจื™ื™ื ื•ื•ืขื ื˜ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืจืึธื“. ื•ื•ืึธืก ืื™ืŸ ื“ื™ ืึทืœื˜ ื˜ืขื’ ื’ืขื ื•ืžืขืŸ ืึท ื”ื•ื ื“ืขืจื˜ ืึธื“ืขืจ ืฆื•ื•ื™ื™ ืฉื•ืจื•ืช ืคื•ืŸ ืงืึธื“, PowerShell ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื˜ืึธืŸ ืžื™ื˜ ืื™ื™ืŸ ื‘ืึทืคึฟืขืœ. ืžื™ืจ ื‘ืึทืฆืึธืœืŸ ืคึฟืึทืจ ื“ืขื ืงืึทื ื•ื•ื™ื ื™ืึทื ืก ืžื™ื˜ ื’ื™ื›ืงื™ื™ึทื˜. ืื™ืŸ ื“ื™ ืงืžื“ืœืขืฅ ื’ื•ืคื ืื™ื– ื ื™ืฉื˜ื ืงื™ื™ืŸ ื›ื™ืฉื•ืฃ: ื“ืขืจ ื–ืขืœื‘ืขืจ ืฉืจื™ืคื˜, ื ืืจ ืื•ื™ืฃ ื ื ื™ื“ืขืจื™ื’ืขืจ ืฉื˜ืืคืœ, ื’ืขืฉืจื™ื‘ืŸ ื“ื•ืจืš ื“ื™ ื‘ืงื™ืื•ืช ื”ืขื ื˜ ืคื•ืŸ ื ื‘ืขืœ ืคื•ืŸ ื–ื•ื ื™ืง ืื™ื ื“ื™ืข.

ืื™ืฆื˜, ืคึฟืึทืจ ืคืึทืจื’ืœื™ื™ึทืš ืžื™ื˜ Get-View, ืœืึธื–ืŸ ืื•ื ื“ื– ื ืขืžืขืŸ ื“ื™ Get-VM ืงืžื“ืœืขื˜: ืขืก ืึทืงืกืขืก ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืื•ืŸ ืงืขืจื˜ ืึท ืงืึธืžืคึผืึธืกื™ื˜ืข ื›ื™ื™ืคืขืฅ, ื“ืึธืก ืื™ื–, ืขืก ืึทื˜ืึทื˜ืฉื™ื– ืื ื“ืขืจืข ืคึฟืึทืจื‘ื•ื ื“ืขื ืข ืึทื‘ื“ื–ืฉืขืงืฅ ืฆื• ืขืก: VMHost, Datastore, ืขื˜ืง.  

ื‘ืึทืงื•ืžืขืŸ-View ืื™ืŸ ื–ื™ื™ืŸ ืึธืจื˜ ื˜ื•ื˜ ื ื™ืฉื˜ ืœื™ื™ื’ืŸ ืขืคึผืขืก ื•ืžื ื™ื™ื˜ื™ืง ืฆื• ื“ื™ ืื•ืžื’ืขืงืขืจื˜ ื›ื™ื™ืคืขืฅ. ื“ืขืจืฆื•, ืขืก ืึทืœืึทื•ื– ืื•ื ื“ื– ืฆื• ืฉื˜ืจืขื ื’ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื•ื•ืึธืก ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืžื™ืจ ื“ืึทืจืคึฟืŸ, ื•ื•ืึธืก ื•ื•ืขื˜ ืžืึทื›ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ื›ื™ื™ืคืขืฅ ื’ืจื™ื ื’ืขืจ. ืื™ืŸ Windows Server ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ ืื•ืŸ ืื™ืŸ Hyper-V ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, ื“ื™ Get-WMIObject ืงืžื“ืœืขื˜ ืื™ื– ืึท ื“ื™ืจืขืงื˜ ืึทื ืึทืœืึธื’ - ื“ืขืจ ื’ืขื“ืึทื ืง ืื™ื– ืคึผื•ื ืงื˜ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ.

ื‘ืึทืงื•ืžืขืŸ-View ืื™ื– ื•ืžื‘ืึทืงื•ื•ืขื ืคึฟืึทืจ ืจื•ื˜ื™ืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืื•ื™ืฃ ืคื•ื ื˜ ืึทื‘ื“ื–ืฉืขืงืฅ. ืื‘ืขืจ ื•ื•ืขืŸ ืขืก ืงื•ืžื˜ ืฆื• ื˜ื•ื™ื–ื ื˜ืขืจ ืื•ืŸ ืฆืขื ื“ืœื™ืงืขืจ ื˜ื•ื™ื–ื ื˜ืขืจ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืก, ืขืก ื”ืื˜ ืงื™ื™ืŸ ืคึผืจื™ื™ึทื–.

ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ืžืขืจ ืื•ื™ืฃ ื“ื™ VMware ื‘ืœืึธื’: ื”ืงื“ืžื” ืฆื• ื‘ืึทืงื•ืžืขืŸ-View

ืื™ืฆื˜ ืื™ืš ื•ื•ืขื˜ ื•ื•ื™ื™ึทื–ืŸ ืื™ืจ ืึทืœืฅ ืžื™ื˜ ืึท ืคืึทืงื˜ื™ืฉ ืคืึทืœ. 

ืฉืจื™ื™ื‘ืŸ ืึท ืฉืจื™ืคื˜ ืฆื• ืึทื ืœืึธื•ื“ ืึท VM

ืื™ื™ืŸ ื˜ืึธื’ ืžื™ื™ืŸ ืงืึธืœืขื’ืข ื’ืขื‘ืขื˜ืŸ ืžื™ืจ ืฆื• ืึทืคึผื˜ืึทืžื™ื™ื– ื–ื™ื™ืŸ ืฉืจื™ืคื˜. ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ืึท ืคึผืจืึธืกื˜ ืจื•ื˜ื™ืŸ: ื’ืขืคึฟื™ื ืขืŸ ืึทืœืข VMs ืžื™ื˜ ืึท ื“ื•ืคึผืœื™ืงืึทื˜ cloud.uuid ืคึผืึทืจืึทืžืขื˜ืขืจ (ื™ืึธ, ื“ืึธืก ืื™ื– ืžืขื’ืœืขืš ื•ื•ืขืŸ ืงืœืึธื•ื ื™ื ื’ ืึท VM ืื™ืŸ vCloud ื“ื™ืจืขืงื˜ืึธืจ). 

ื“ื™ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ืœื™ื™ื–ื•ื ื’ ื•ื•ืึธืก ืงื•ืžื˜ ืฆื• ืžื™ื™ื ื•ื ื’ ืื™ื–:

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

ืึทืœืฅ ืื™ื– ื’ืึธืจ ืคึผืฉื•ื˜ ืื•ืŸ ืงืœืึธืจ. ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ืžื™ื ื•ื˜ ืžื™ื˜ ืึท ืงืึทื•ื•ืข ื‘ืจืขื›ืŸ. ืฉืจื•ื™ืฃ ืื•ื™ืฃ ื“ื™ Filtration ืื•ืŸ ืขืก ืื™ื– ื’ืขื˜ืืŸ.

ืื‘ืขืจ ืœืืžื™ืจ ืžืขืกื˜ืŸ ื“ื™ ืฆื™ื™ื˜:

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ ืึท ืจืึทืงืขื˜ ื‘ื•ืกื˜ืขืจ ืคึฟืึทืจ PowerCLI ืกืงืจื™ืคึผืก

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ ืึท ืจืึทืงืขื˜ ื‘ื•ืกื˜ืขืจ ืคึฟืึทืจ PowerCLI ืกืงืจื™ืคึผืก

2 ืžื™ื ื•ื˜ 47 ืกืขืงื•ื ื“ืขืก ื•ื•ืขืŸ ืคึผืจืึทืกืขืกื™ื ื’ ื›ึผืžืขื˜ 10 ืง ื•ื•ืžืก. ื ื‘ืึธื ื•ืก ืื™ื– ื“ืขืจ ืึทื•ื•ืขืง ืคื•ืŸ ืคื™ืœื˜ืขืจืก ืื•ืŸ ื“ื™ ื ื•ื™ื˜ ืฆื• ืžืึทื ื™ื•ืึทืœื™ ืกืึธืจื˜ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ. ื“ืึธืš, ื“ืขืจ ืฉืจื™ืคื˜ ืจื™ืงื•ื•ื™ื™ืขืจื– ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ.

ืจื•ื ืกืคึผื™ื™ืกืึทื– ื–ืขื ืขืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืฆื• ืจืึทื˜ืขื•ื•ืขืŸ ื•ื•ืขืŸ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ ื‘ืึทืงื•ืžืขืŸ ื‘ืึทืœืขื‘ืึธืก ืžืขื˜ืจื™ืงืก ืคึฟื•ืŸ 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 ืึทืจื‘ืขื˜ ืžื™ื˜ ืึทื‘ื“ื–ืฉืขืงืฅ ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ื•ื•ื™ ืึท ืคึผืึทืจืึทืžืขื˜ืขืจ ืึธื“ืขืจ ืฆื• ืึท ืคึฟื•ื ืงืฆื™ืข ืึธื“ืขืจ ืฆื• ืึท ืกืงืจื™ืคึผื˜ื‘ืœืึธืงืง. ืœืึธืžื™ืจ ืคืึธืจืŸ ื“ื™ ืกืขืกื™ืข ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึทื–ืึท ืึท ื›ื™ื™ืคืขืฅ, ื‘ื™ื™ืคึผืึทืกื™ื ื’ $global:DefaultVIServers (ืคืึทืจื‘ื™ื ื“ืŸ-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 ืคึผืึธืึธืœืก.  

ื“ื™ ืึทืœื’ืขืจื™ื“ืึทื ืื™ื– ื•ื•ื™ ื’ื™ื™ื˜:

  1. ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ืึทืœืข VMs.
  2. ืื™ืŸ ืคึผืึทืจืึทืœืขืœ ืกื˜ืจื™ืžื– ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ cloud.uuid.
  3. ืžื™ืจ ืงืœื™ื™ึทื‘ืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืกื˜ืจื™ืžื– ืื™ืŸ ืื™ื™ืŸ ื›ื™ื™ืคืขืฅ.
  4. ืžื™ืจ ืคื™ืœื˜ืขืจ ื“ื™ ื›ื™ื™ืคืขืฅ ื“ื•ืจืš ื’ืจื•ืคึผื™ื ื’ ืขืก ื“ื•ืจืš ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ CloudUUID ืคืขืœื“: ื“ื™ ื•ื•ื• ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื™ื™ื ืฆื™ืง ื•ื•ืึทืœื•ืขืก ืื™ื– ื’ืจืขืกืขืจ ื•ื•ื™ 1 ื–ืขื ืขืŸ ื“ื™ VMs ืžื™ืจ ื–ืขื ืขืŸ ืงื•ืงืŸ ืคึฟืึทืจ.

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืฉืจื™ืคื˜:


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
}

ื“ื™ ืฉื™ื™ื ืงื™ื™ื˜ ืคื•ืŸ ื“ืขื ืฉืจื™ืคื˜ ืื™ื– ืึทื– ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืื™ืŸ ืื ื“ืขืจืข ืขื ืœืขืš ืงืึทืกืขืก ื“ื•ืจืš ืคืฉื•ื˜ ืจื™ืคึผืœื™ื™ืกื™ื ื’ ื“ื™ ืกืงืจื™ืคึผื˜ื‘ืœืึธืงืง ืื•ืŸ ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ื“ื™ ื˜ื™ื™ึทืš. ืื•ื™ืกื ื•ืฆืŸ ืขืก!

ืžื™ืจ ืžืขืกื˜ืŸ ืฆื™ื™ื˜:

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ ืึท ืจืึทืงืขื˜ ื‘ื•ืกื˜ืขืจ ืคึฟืึทืจ PowerCLI ืกืงืจื™ืคึผืก

55 ืกืขืงื•ื ื“ืขืก. ืขืก ืื™ื– ื‘ืขืกืขืจ, ืึธื‘ืขืจ ืขืก ืงืขืŸ ื ืึธืš ื–ื™ื™ืŸ ืคืึทืกื˜ืขืจ. 

ืœืึธืžื™ืจ ื’ื™ื™ืŸ ืฆื• ื“ื™ ืจื’ืข ื’ื™ื›ืงื™ื™ึทื˜: GetView

ืœืึธืžื™ืจ ื’ืขืคึฟื™ื ืขืŸ ืื•ื™ืก ื•ื•ืึธืก ืื™ื– ืคืึทืœืฉ.
ืขืจืฉื˜ืขืจ ืื•ืŸ ืขืจืฉื˜ืขืจ, ื“ื™ Get-VM cmdlet ื ืขืžื˜ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜ ืฆื• ื•ื™ืกืคื™ืจืŸ.
ืฆื•ื•ื™ื™ื˜ื ืก, ื“ื™ ืงืžื“ืœืขื˜ ืคื•ืŸ Get-AdvancedOptions ื ืขืžื˜ ืืคื™ืœื• ืžืขืจ ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ.
ืœืึธืžื™ืจ ื–ื™ืš ืขืจืฉื˜ ื‘ืึทื”ืึทื ื“ืœืขืŸ ืžื™ื˜ืŸ ืฆื•ื•ื™ื™ื˜ืŸ. 

Get-AdvancedOptions ืื™ื– ื‘ืึทืงื•ื•ืขื ืคึฟืึทืจ ื™ื—ื™ื“ VM ืึทื‘ื“ื–ืฉืขืงืฅ, ืึธื‘ืขืจ ื–ื™ื™ืขืจ ืœืขืคึผื™ืฉ ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืคื™ืœืข ืึทื‘ื“ื–ืฉืขืงืฅ. ืžื™ืจ ืงืขื ืขืŸ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ื–ืขืœื‘ืข ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืคึฟื•ืŸ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื›ื™ื™ืคืขืฅ ื–ื™ืš (Get-VM). ืขืก ืื™ื– ื ืึธืจ ื‘ืขืจื™ื“ ื’ืขื–ื•ื ื˜ ืื™ืŸ ื“ื™ ืขืงืกื˜ืขื ืกื™ืึธื ื“ืึทื˜ืึท ื›ื™ื™ืคืขืฅ. ืึทืจืžื“ ืžื™ื˜ ืคึฟื™ืœื˜ืจื™ืจื•ื ื’, ืžื™ืจ ืคืึทืจื’ื™ื›ืขืจืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืคื•ืŸ ื‘ืืงื•ืžืขืŸ ื“ื™ ื ื™ื™ื˜ื™ืง ื“ืึทื˜ืŸ.

ืžื™ื˜ ืึท ืงืœื™ื™ืŸ ื‘ืึทื•ื•ืขื’ื•ื ื’ ืคื•ืŸ ื“ื™ ื”ืึทื ื˜ ื“ืึธืก ืื™ื–:


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, ืึธื‘ืขืจ ืขืก ืึทืจื‘ืขื˜ ืคื™ืœืข ืžืึธืœ ืคืึทืกื˜ืขืจ. 

ืื™ืฆื˜ ืฆื• ื‘ืึทืงื•ืžืขืŸ-VM. ืขืก ืื™ื– ื ื™ืฉื˜ ืฉื ืขืœ ื•ื•ื™ื™ึทืœ ืขืก ื“ื™ืœื– ืžื™ื˜ ืงืึธืžืคึผืœืขืงืก ืึทื‘ื“ื–ืฉืขืงืฅ. ื ืœืึทื“ื–ืฉื™ืงืึทืœ ืงืฉื™ื ืขืจื™ื™ื–ืึทื–: ื•ื•ืึธืก ื˜ืึธืŸ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืขืงืกื˜ืจืข ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื•ืŸ ืึท ืžืึทื ืกื˜ืจืึทืก ืคึผืกืึธื‘ื“ื–ืฉืขืงื˜ ืื™ืŸ ื“ืขื ืคืึทืœ, ื•ื•ืขืŸ ืžื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ VM, ื–ื™ื™ึทืŸ ืฉื˜ืึทื˜ ืื•ืŸ ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ืึท ื˜ืจื™ืงื™ ืึทื˜ืจื™ื‘ื™ื•ื˜?  

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื“ื™ ืฉื˜ืขืจื•ื ื’ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ Get-AdvancedOptions ืื™ื– ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ื™ ืฉืจื™ืคื˜. ื ื™ืฆืŸ ืจื•ื ืกืคึผืึทืกืข ืคึผืึธืึธืœืก ืื™ืฆื˜ ืกื™ืžื– ื•ื•ื™ ืึธื•ื•ื•ืขืจืงื™ืœ ื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ื ื™ื˜ ืžืขืจ ืึท ื ื•ื™ื˜ ืฆื• ืคึผืึทืจืึทืœืขืœื™ื–ื™ืจืŸ ืึท ืคึผืึทืžืขืœืขืš ืึทืจื‘ืขื˜ ืึทืจื™ื‘ืขืจ ืกืงื•ื•ืึทื˜ ืคึฟืขื“ืขื ื•ื•ืขืŸ ืื™ื‘ืขืจื’ืขื‘ืŸ ืึท ืกืขืกื™ืข. ื“ื™ ื’ืขืฆื™ื™ึทื’ ืื™ื– ื’ื•ื˜, ืึธื‘ืขืจ ื ื™ืฉื˜ ืคึฟืึทืจ ื“ืขื ืคืึทืœ. 

ืœืึธืžื™ืจ ื–ืขืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืขืงืกื˜ืขื ืกื™ืึธื ื“ืึทื˜ืึท: ืขืก ืื™ื– ื’ืึธืจื ื™ืฉื˜ ืžืขืจ ื•ื•ื™ ืึท ื‘ืึทืงื•ืžืขืŸ-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 ืกืงืจื™ืคึผืก

ืงืกื ื•ืžืงืก ืกืขืงื•ื ื“ืขืก ืคึฟืึทืจ ื›ึผืžืขื˜ 10 ืง ืึทื‘ื“ื–ืฉืขืงืฅ ืžื™ื˜ ืคึฟื™ืœื˜ืจื™ืจื•ื ื’ ืœื•ื™ื˜ ื“ื™ ื’ืขื‘ืขื˜ืŸ ืฆื•ืฉื˜ืึทื ื“. ื’ืจื•ื™ืก!

ืึธื ืฉื˜ืึธื˜ ืึท ืžืกืงื ื

ืึท ืคึผืึทืกื™ืง ืจืขื–ื•ืœื˜ืึทื˜ ื’ืœื™ื™ึทืš ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื“ื™ ื‘ืจื™ืจื” ืคื•ืŸ ื’ืขืฆื™ื™ึทื’. ืขืก ืื™ื– ืึธืคื˜ ืฉื•ื•ืขืจ ืฆื• ื–ืึธื’ืŸ ืคึฟืึทืจ ื–ื™ื›ืขืจ ื•ื•ืึธืก ืคึผื•ื ืงื˜ ื–ืึธืœ ื–ื™ื™ืŸ ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ืขืก. ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ ืœื™ืกื˜ืขื“ ืžืขื˜ื”ืึธื“ืก ืคึฟืึทืจ ืกืคึผื™ื“ื™ื ื’ ืกืงืจื™ืคึผืก ืื™ื– ื’ื•ื˜ ืื™ืŸ ื“ื™ ืœื™ืžืึทืฅ ืคื•ืŸ ื–ื™ื™ึทืŸ ืึธื ื•ื•ืขื ื“ืœืขืš. ืื™ืš ื”ืึธืคึฟืŸ ืึทื– ื“ืขืจ ืึทืจื˜ื™ืงืœ ื•ื•ืขื˜ ื”ืขืœืคึฟืŸ ืื™ืจ ืื™ืŸ ื“ื™ ืฉื•ื•ืขืจ ืึทืจื‘ืขื˜ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ื‘ืึทืกื™ืงืก ืคื•ืŸ ืคึผืจืึธืฆืขืก ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืื•ืŸ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืื™ืŸ ื“ื™ื™ืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ.

ืคึผืก: ื“ืขืจ ืžื—ื‘ืจ ื“ืึทื ืงืขืŸ ืึทืœืข ืงื”ืœ ืžื™ื˜ื’ืœื™ื“ืขืจ ืคึฟืึทืจ ื–ื™ื™ืขืจ ื”ื™ืœืฃ ืื•ืŸ ืฉื˜ื™ืฆืŸ ืื™ืŸ ืคึผืจื™ืคึผืขืจื™ื ื’ ื“ืขื ืึทืจื˜ื™ืงืœ. ืืคื™ืœื• ื“ื™ ืžื™ื˜ ืคึผืึธื–. ืื•ืŸ ืืคื™ืœื• ื“ื™ ื•ื•ืืก ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืœืขื’ืก, ื•ื•ื™ ืึท ื‘ืึธืึท ืงืึธื ืกื˜ืจื™ืงื˜ืึธืจ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’