PowerCLI рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд░рдХреЗрдЯ рдмреВрд╕реНрдЯрд░ рдХрд╕рд░реА рдмрдирд╛рдЙрдиреЗ 

рдврд┐рд▓реЛ рд╡рд╛ рдкрдЫрд┐, рдХреБрдиреИ рдкрдирд┐ VMware рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╢рд╛рд╕рдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди рдЖрдЙрдБрдЫред рдпреЛ рд╕рдмреИ рдЖрджреЗрд╢ рд░реЗрдЦрд╛рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ PowerShell рд╡рд╛ VMware PowerCLI рдЖрдЙрдБрдЫред

рдорд╛рдиреМрдВ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ ISE рд╕реБрд░реБ рдЧрд░реНрди рд░ "рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рдХреЛ рдЬрд╛рджреВ" рдХреЛ рдХрд╛рд░рдгрд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреЗ рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдмрд╛рдЯ рдорд╛рдирдХ cmdlets рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рднрдиреНрджрд╛ рдЕрд▓рд┐ рдЕрдЧрд╛рдбрд┐ PowerShell рдорд╛ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫред рдЬрдм рддрдкрд╛рдИрдВрд▓реЗ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕рдпреМрдВрдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрди рдерд╛рд▓реНрдиреБрд╣реБрдиреНрдЫ, рддрдкрд╛рдИрдВрд▓реЗ рд╕рд╛рдиреЛ рд╕реНрдХреЗрд▓рдорд╛ рдорджреНрджрдд рдЧрд░реНрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдареВрд▓реЛ рд╕реНрдХреЗрд▓рдорд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдврд┐рд▓реЛ рдЪрд▓реНрдиреЗ рднреЗрдЯреНрдЯрд╛рдЙрдиреБрд╣реБрдиреЗрдЫред 

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, 2 рдЙрдкрдХрд░рдгрд╣рд░реВрд▓реЗ рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ:

  • PowerShell Runspaces - рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбрд╣рд░реВрдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ; 
  • рдЧреЗрдЯ-рджреГрд╢реНрдп - рдПрдХ рдЖрдзрд╛рд░рднреВрдд PowerCLI рдкреНрд░рдХрд╛рд░реНрдп, Windows рдорд╛ Get-WMIObject рдХреЛ рдПрдХ рдПрдирд╛рд▓рдЧред рдпреЛ cmdlet рд▓реЗ рд╡рд╕реНрддреБрд╣рд░реВ рд╕рдБрдЧреИ рд╡рд╕реНрддреБрд╣рд░реВ рддрд╛рдиреНрджреИрди, рддрд░ рд╕рд╛рдзрд╛рд░рдг рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВрдХреЛ рд╕рд╛рде рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдХреЛ рд░реВрдкрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫред рдзреЗрд░реИ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ рдЫрд┐рдЯреЛ рдмрд╛рд╣рд┐рд░ рдЖрдЙрдБрдЫред

рдЕрд░реНрдХреЛ, рдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреБ рд░ рдкреНрд░рдпреЛрдЧрдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБред рд╡рд┐рд╢реЗрд╖ рд▓рд┐рдкрд┐рд╣рд░реВрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реМрдВ рд░ рд╣реЗрд░реМрдВ рдЬрдм рдПрдЙрдЯрд╛рд▓реЗ рдЕрд░реНрдХреЛ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдХрд╛рдо рдЧрд░реНрдЫред рдЬрд╛рдЙ!

PowerCLI рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд░рдХреЗрдЯ рдмреВрд╕реНрдЯрд░ рдХрд╕рд░реА рдмрдирд╛рдЙрдиреЗ

рдкрд╣рд┐рд▓реЛ рдЪрд░рдг: рд░рдирд╕реНрдкреЗрд╕

рддреНрдпрд╕реИрд▓реЗ, рд░рдирд╕реНрдкреЗрд╕ рдореБрдЦреНрдп рдореЛрдбреНрдпреБрд▓ рдмрд╛рд╣рд┐рд░рдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдкреНрд░рд╢реЛрдзрдирдХреЛ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рддрдкрд╛рдИрдВрд▓реЗ рдЕрд░реНрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕рд▓реЗ рдХреЗрд╣реА рдореЗрдореЛрд░реА, рдкреНрд░реЛрд╕реЗрд╕рд░, рдЖрджрд┐ рдЦрд╛рдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╣реА рдорд┐рдиреЗрдЯрдорд╛ рдЪрд▓реНрдЫ рд░ рдореЗрдореЛрд░реАрдХреЛ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдЦрдкрдд рд╣реБрдиреНрдЫ рднрдиреЗ, рд╕рдореНрднрд╡рддрдГ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд░рдирд╕реНрдкреЗрд╕ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред рддрд░ рджрд╢реМрдВ рд╣рдЬрд╛рд░ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд▓рд┐рдкрд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫред

рддрдкрд╛рдИрдВ рдпрд╣рд╛рдБ рд╕рд┐рдХреНрди рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: 
PowerShell Runspaces рдХреЛ рд╢реБрд░реБрд╡рд╛рдд рдкреНрд░рдпреЛрдЧ: рднрд╛рдЧ 1

рд░рдирд╕реНрдкреЗрд╕ рдкреНрд░рдпреЛрдЧрд▓реЗ рдХреЗ рджрд┐рдиреНрдЫ:

  • рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕реАрдорд┐рдд рдЧрд░реЗрд░ рдЧрддрд┐,
  • рдХрд╛рд░реНрдпрдХреЛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди,
  • рд╕реБрд░рдХреНрд╖рд╛ред

рдпрд╣рд╛рдБ рдЗрдиреНрдЯрд░рдиреЗрдЯрдмрд╛рдЯ рдПрдЙрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рдЫ рдЬрдм рд░рдирд╕реНрдкреЗрд╕рд▓реЗ рдорджреНрджрдд рдЧрд░реНрджрдЫ:

"рднрдгреНрдбрд╛рд░рдг рд╡рд┐рд╡рд╛рдж vSphere рдорд╛ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рд╕рдмреИрднрдиреНрджрд╛ рдХрдард┐рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдордзреНрдпреЗ рдПрдХ рд╣реЛред vCenter рднрд┐рддреНрд░, рддрдкрд╛рдИрдВ рдЧрдПрд░ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрди рдХреБрди VM рд▓реЗ рдердк рднрдгреНрдбрд╛рд░рдг рд╕реНрд░реЛрддрд╣рд░реВ рдЦрдкрдд рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫред рд╕реМрднрд╛рдЧреНрдпрд╡рд╢, рддрдкрд╛рдИрдВрд▓реЗ PowerShell рд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рдж рдорд┐рдиреЗрдЯрдорд╛ рдпреЛ рдбрд╛рдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреЗрдЫреБ рдЬрд╕рд▓реЗ VMware рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╢рд╛рд╕рдХрд╣рд░реВрд▓рд╛рдИ vCenter рдорд╛ рджреНрд░реБрдд рд░реВрдкрдорд╛ рдЦреЛрдЬреА рдЧрд░реНрди рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдФрд╕рдд рдЦрдкрддрдорд╛ рдбреЗрдЯрд╛ рд╕рд╣рд┐рдд VM рдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред  
рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ ESXi рд╣реЛрд╕реНрдЯрд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рд░рдирд╕реНрдкреЗрд╕рдорд╛ рдЖрдлреНрдиреИ VM рдмрд╛рдЯ рдЦрдкрдд рдЬрд╛рдирдХрд╛рд░реА рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рд░ рддреБрд░реБрдиреНрддреИ рдкреВрд░рд╛ рднрдПрдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рди PowerShell рд░рдирд╕реНрдкреЗрд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдпрд╕рд▓реЗ PowerShell рд▓рд╛рдИ рд╣реЛрд╕реНрдЯрд╣рд░реВ рдорд╛рд░реНрдлрдд рджреЛрд╣реЛрд░реНрдпрд╛рдПрд░ рд░ рдкреНрд░рддреНрдпреЗрдХрд▓реЗ рдЖрдлреНрдиреЛ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдЧрд░реНрди рдкрд░реНрдЦрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛ рддреБрд░реБрдиреНрддреИ рдХрд╛рдорд╣рд░реВ рдмрдиреНрдж рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред"

рд╕реНрд░реЛрдд: ESXi рдбреНрдпрд╛рд╕рдмреЛрд░реНрдбрдорд╛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди I/O рдХрд╕рд░реА рджреЗрдЦрд╛рдЙрдиреЗ

рддрд▓рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд░рдирд╕реНрдкреЗрд╕ рдЕрдм рдЙрдкрдпреЛрдЧреА рдЫреИрди:

"рдо VM рдмрд╛рдЯ рдзреЗрд░реИ рдбрд╛рдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреЗ рд░ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрд╛ рдирдпрд╛рдБ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЦреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджреИрдЫреБред рд╕рдорд╕реНрдпрд╛ рдпреЛ рдЫ рдХрд┐ рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ VMs рдЫрдиреН, рд░ 5-8 рд╕реЗрдХреЗрдиреНрдб рдПрдХ рдореЗрд╕рд┐рдирдорд╛ рдЦрд░реНрдЪ рдЧрд░рд┐рдиреНрдЫред 

рд╕реНрд░реЛрдд: RunspacePool рдХреЛ рд╕рд╛рде Multithreading PowerCLI

рдпрд╣рд╛рдБ рддрдкрд╛рдИрд▓рд╛рдИ рдЧреЗрдЯ-рджреГрд╢реНрдп рдЪрд╛рд╣рд┐рдиреНрдЫ, рдпрд╕рдорд╛ рдЕрдЧрд╛рдбрд┐ рдмрдвреМрдВред 

рджреЛрд╕реНрд░реЛ рдЪрд░рдг: рдЧреЗрдЯ-рджреГрд╢реНрдп

рдЧреЗрдЯ-рджреГрд╢реНрдп рдХрд┐рди рдЙрдкрдпреЛрдЧреА рдЫ рднрдиреЗрд░ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, cmdlets рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗрд░ рд╕рдореНрдЭрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред 

рдПрдкреАрдЖрдИ рд╕рдиреНрджрд░реНрдн рдкреБрд╕реНрддрдХрд╣рд░реВ рдЕрдзреНрдпрдпрди рдЧрд░реНрди рд░ рдЕрд░реНрдХреЛ рдкрд╛рдЩреНрдЧреНрд░рд╛рд▓рд╛рдИ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирдЧрд░реА рд╕рд╣рдЬ рд░реВрдкрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди Cmdlets рдЖрд╡рд╢реНрдпрдХ рдЫред рдкреБрд░рд╛рдиреЛ рджрд┐рдирд╣рд░реВрдорд╛ рдХреЛрдбрдХреЛ рдПрдХ рд╕рдп рд╡рд╛ рджреБрдИ рд▓рд╛рдЗрди рд▓рд┐рдиреЗ рдХреБрд░рд╛, PowerShell рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрдЙрдЯрд╛ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рд╣рд╛рдореА рдЧрддрд┐ рд╕рдВрдЧ рдпреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреА рднреБрдХреНрддрд╛рди рдЧрд░реНрджрдЫред cmdlets рднрд┐рддреНрд░ рдЖрдлреИрдВрдорд╛ рдХреБрдиреИ рдЬрд╛рджреВ рдЫреИрди: рдПрдЙрдЯреИ рд▓рд┐рдкрд┐, рддрд░ рддрд▓реНрд▓реЛ рддрд╣рдорд╛, рд╕рдиреА рднрд╛рд░рддрдХрд╛ рдПрдХ рдорд╛рд╕реНрдЯрд░рдХреЛ рдХреБрд╢рд▓ рд╣рд╛рддрд▓реЗ рд▓реЗрдЦрд┐рдПрдХреЛред

рдЕрдм, Get-View рд╕рдБрдЧ рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐, Get-VM cmdlet рд▓рд┐рдФрдВ: рдпрд╕рд▓реЗ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрдЫ рд░ рдХрдореНрдкреЛрдЬрд┐рдЯ рд╡рд╕реНрддреБ рдлрд░реНрдХрд╛рдЙрдБрдЫ, рддреНрдпреЛ рд╣реЛ, рдпрд╕рд▓реЗ рдпрд╕рдорд╛ рдЕрдиреНрдп рд╕рдореНрдмрдиреНрдзрд┐рдд рд╡рд╕реНрддреБрд╣рд░реВ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрджрдЫ: VMHost, Datastore, рдЖрджрд┐ред  

рдпрд╕рдХреЛ рд╕реНрдерд╛рдирдорд╛ Get-View рд▓реЗ рдлрд┐рд░реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ рд╡рд╕реНрддреБрдорд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗрд╣рд┐ рдердкреНрджреИрдиред рдпрд╕рдмрд╛рд╣реЗрдХ, рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдХреБрди рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреЗрд░ рдХрдбрд╛рдИрдХрд╛ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╕реНрддреБрд▓рд╛рдИ рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрджрдЫред рд╡рд┐рдиреНрдбреЛрдЬ рд╕рд░реНрднрд░рдорд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд░ рд╣рд╛рдЗрдкрд░-V рдорд╛, Get-WMIObject cmdlet рдкреНрд░рддреНрдпрдХреНрд╖ рдПрдирд╛рд▓рдЧ рд╣реЛ - рд╡рд┐рдЪрд╛рд░ рдареНрдпрд╛рдХреНрдХреИ рдЙрд╕реНрддреИ рдЫред

рдЧреЗрдЯ-рджреГрд╢реНрдп рдмрд┐рдиреНрджреБ рд╡рд╕реНрддреБрд╣рд░реВрдорд╛ рдирд┐рдпрдорд┐рдд рд╕рдЮреНрдЪрд╛рд▓рдирдХрд╛ рд▓рд╛рдЧрд┐ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫред рддрд░ рдЬрдм рдпреЛ рд╣рдЬрд╛рд░реМрдВ рд░ рджрд╢реМрдВ рд╣рдЬрд╛рд░ рд╡рд╕реНрддреБрд╣рд░реВрдорд╛ рдЖрдЙрдБрдЫ, рдпрд╕рдХреЛ рдХреБрдиреИ рдореВрд▓реНрдп рд╣реБрдБрджреИрдиред

рддрдкрд╛рдИрдВ VMware рдмреНрд▓рдЧрдорд╛ рдердк рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: Get-View рдХреЛ рдкрд░рд┐рдЪрдп

рдЕрдм рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдмреИ рдХреБрд░рд╛ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБред 

VM рдЕрдирд▓реЛрдб рдЧрд░реНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЦреНрджреИ

рдПрдХ рджрд┐рди рдореЗрд░реЛ рд╕рд╣рдХрд░реНрдореАрд▓реЗ рдорд▓рд╛рдИ рдЙрдирдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрди рднрдиреЗред рдХрд╛рд░реНрдп рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рдирдЪрд░реНрдпрд╛ рд╣реЛ: рдбреБрдкреНрд▓рд┐рдХреЗрдЯ cloud.uuid рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд╕рд╛рде рд╕рдмреИ VM рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН (рд╣реЛ, vCloud рдирд┐рд░реНрджреЗрд╢рдХрдорд╛ VM рдХреНрд▓реЛрди рдЧрд░реНрджрд╛ рдпреЛ рд╕рдореНрднрд╡ рдЫ)ред 

рджрд┐рдорд╛рдЧрдорд╛ рдЖрдЙрдиреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╣реЛ:

  1. рд╕рдмреИ VM рдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  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 рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд░рдХреЗрдЯ рдмреВрд╕реНрдЯрд░ рдХрд╕рд░реА рдмрдирд╛рдЙрдиреЗ

Minutes рдорд┐рдиреЗрдЯ secondsреж рд╕реЗрдХреЗрдиреНрдб рд▓рдЧрднрдЧ 10k VMs рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджрд╛ред рдмреЛрдирд╕ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВрдХреЛ рдЕрднрд╛рд╡ рд░ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЬрд╛рд╣рд┐рд░ рдЫ, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЪрд╛рд╣рд┐рдиреНрдЫред

рддрдкрд╛рдИрдВрд▓реЗ 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 (-NotDefault рдХреБрдЮреНрдЬреАрд╕рдБрдЧ рдЬрдбрд╛рди-VIServer) рд▓рд╛рдИ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реНрджреИ, рдпрд╕реНрддреЛ рд╡рд╕реНрддреБрдХреЛ рд░реВрдкрдорд╛ рд╕рддреНрд░ рдкрд╛рд╕ рдЧрд░реМрдВ:

$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. рд╣рд╛рдореАрд▓реЗ рд╕рдмреИ VM рдХреЛ рд╕реВрдЪреА рдкрд╛рдЙрдБрдЫреМрдВред
  2. рд╕рдорд╛рдирд╛рдиреНрддрд░ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВрдорд╛ рд╣рд╛рдореАрд▓реЗ cloud.uuid рдкрд╛рдЙрдБрдЫреМрдВред
  3. рд╣рд╛рдореА рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВрдмрд╛рдЯ рдПрдХ рд╡рд╕реНрддреБрдорд╛ рдбреЗрдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдЫреМрдВред
  4. рд╣рд╛рдореА рд╡рд╕реНрддреБрд▓рд╛рдИ рдХреНрд▓рд╛рдЙрдбрдпреВрдпреВрдЖрдИрдбреА рдлрд┐рд▓реНрдбрдХреЛ рдорд╛рдирджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣рдмрджреНрдз рдЧрд░реЗрд░ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрдЫреМрдВ: рдЬрд╣рд╛рдБ рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ 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 рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд░рдХреЗрдЯ рдмреВрд╕реНрдЯрд░ рдХрд╕рд░реА рдмрдирд╛рдЙрдиреЗ

55реирежрежреж рд╕реЗрдХреЗрдиреНрдбред рдпреЛ рд░рд╛рдореНрд░реЛ рдЫ, рддрд░ рдпреЛ рдЕрдЭреИ рдЫрд┐рдЯреЛ рд╣реБрди рд╕рдХреНрдЫред 

рджреЛрд╕реНрд░реЛ рдЧрддрд┐рдорд╛ рдЬрд╛рдФрдВ: GetView

рдХреЗ рдЧрд▓рдд рдЫ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реНред
рдкрд╣рд┐рд▓реЛ рд░ рдореБрдЦреНрдп рдХреБрд░рд╛, Get-VM cmdlet рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд▓рд╛рдореЛ рд╕рдордп рд▓рд╛рдЧреНрдЫред
рджреЛрд╕реНрд░реЛ, Get-AdvancedOptions cmdlet рдкреВрд░рд╛ рд╣реБрди рдЕрдЭ рдмрдвреА рд╕рдордп рд▓рд╛рдЧреНрдЫред
рдкрд╣рд┐рд▓реЗ рджреЛрд╕реНрд░реЛрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реМрдВред 

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 рдЬрд╕реНрддреИ рд╣реЛ, рддрд░ рдпрд╕рд▓реЗ рдзреЗрд░реИ рдкрдЯрдХ рдЫрд┐рдЯреЛ рдХрд╛рдо рдЧрд░реНрдЫред 

рдЕрдм Get-VM рдорд╛ред рдпреЛ рдЫрд┐рдЯреЛ рдЫреИрди рдХрд┐рдирднрдиреЗ рдпрд╕рд▓реЗ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрд╣рд░реВрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрджрдЫред рдПрдЙрдЯрд╛ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рд╢реНрди рдЙрдареНрдЫ: рд╣рд╛рдореАрд▓рд╛рдИ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдХрд┐рди рдердк рдЬрд╛рдирдХрд╛рд░реА рд░ рд░рд╛рдХреНрд╖рд╕реА PSO рд╡рд╕реНрддреБ рдЪрд╛рд╣рд┐рдиреНрдЫ, рдЬрдм рд╣рд╛рдореАрд▓рд╛рдИ рдХреЗрд╡рд▓ VM рдХреЛ рдирд╛рдо, рдпрд╕рдХреЛ рдЕрд╡рд╕реНрдерд╛ рд░ рдПрдХ рдХрдард┐рди рд╡рд┐рд╢реЗрд╖рддрд╛рдХреЛ рдореВрд▓реНрдп рдЪрд╛рд╣рд┐рдиреНрдЫ?  

рдердк рд░реВрдкрдорд╛, рд▓рд┐рдкрд┐рдмрд╛рдЯ Get-AdvancedOptions рдХреЛ рд░реВрдкрдорд╛ рдЕрд╡рд░реЛрдз рд╣рдЯрд╛рдЗрдПрдХреЛ рдЫред рд░рдирд╕реНрдкреЗрд╕ рдкреВрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдм рдУрднрд░рдХрд┐рд▓ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐рдирдХрд┐ рдЕрдм рд╕реЗрд╕рди рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рдЧрд░реНрджрд╛ рд╕реНрдХреНрд╡рд╛рдЯ рдереНрд░реЗрдбрд╣рд░реВрдорд╛ рдврд┐рд▓реЛ рдХрд╛рд░реНрдпрд▓рд╛рдИ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред рдЙрдкрдХрд░рдг рд░рд╛рдореНрд░реЛ рдЫ, рддрд░ рдпрд╕ рдорд╛рдорд▓рд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛрдЗрдиред 

ExtensionData рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЗрд░реМрдВ: рдпреЛ рдЧреЗрдЯ-рджреГрд╢реНрдп рд╡рд╕реНрддреБ рднрдиреНрджрд╛ рдмрдврд┐ рдХреЗрд╣рд┐ рд╣реЛрдЗрдиред 

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: рд▓реЗрдЦ рддрдпрд╛рд░ рдЧрд░реНрди рд╕рд╣рдпреЛрдЧ рд░ рд╕рд╣рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рд▓реЗрдЦрдХ рд╕рдмреИ рд╕рдореБрджрд╛рдпрдХрд╛ рд╕рджрд╕реНрдпрд╣рд░реВрд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдиреНрдЫрдиреНред рдкрдЮреНрдЬрд╛ рднрдПрдХрд╛рд╣рд░реВ рдкрдирд┐ред рд░ рдЦреБрдЯреНрдЯрд╛ рдирднрдПрдХрд╛рд╣рд░реВ рдкрдирд┐, рдмреЛрдЖ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬрд╕реНрддреИред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди