рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реНрдЯреЗрдЯрд╕ рдбреЗрд▓реА рд░рд┐рдкреЛрд░реНрдЯреНрд╕ рд╡рд┐рде рдЖрд░ рдПрдВрдб рдкреЙрд╡рд░рд╢реЗрд▓


рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


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


рдЧрдарди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ (рд▓рдЧрднрдЧ 1500 рд╡реАрдПрдо 3 рд╡реЗрдВрдХреЗрдЯрд░ рдкрд░ рд╡рд┐рддрд░рд┐рдд) рд╣реИрдВред рдирдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рдЕрдХреНрд╕рд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрджреЗрд╢ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реАрдПрдорд╕реА рдХреЛ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП vCenter рдореЗрдВ рдХрдИ рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗ рдЧрдП, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдХрдмред рдорд╛рдирд╡ рдХрд╛рд░рдХ рдиреЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реЛрдВ рдХреЛ рдЦрд╛рд▓реА рдЦреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд╛рдо рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред рд╣рд░ рдЫрд╣ рдорд╣реАрдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдиреЗ рдЗрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдбреЗрдврд╝ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд░рд╣ рдЧрдпрд╛ рд╣реИред
рдореИрдВ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ рдХрд┐ рд╣рд░ рдХреЛрдИ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдорд╢реАрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрджрд┐ред рдЖрджрд┐ рдФрд░ рдЬрдмрдХрд┐ рдЗрд╕ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдФрд░ рдХреНрд░рдо рдореЗрдВ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рд╕рд╛рде рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИ :)


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЦреЗрддреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╕рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡рд░рд┐рд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднрд░реА рдорд╢реАрдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рджреИрдирд┐рдХ рдкрддреНрд░ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реЛрдЧреАред


рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ PowerShell рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЧреВ рдХрд░ рджреА рдереА, рдЬреЛ рд╣рд░ рджрд┐рди рдПрдХ рдЕрдиреБрд╕реВрдЪреА рдкрд░ рд╕рднреА vCenter-s рдХреА рд╕рднреА рдорд╢реАрдиреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рдерд╛ рдФрд░ 3 рд╕реАрдПрд╕рд╡реА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ (рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ vCenter рдореЗрдВ) рдХрд╛ рдЧрдарди рдХрд░рддрд╛ рдерд╛, рдЬреЛ рдПрдХ рд╕рд╛рдЭрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рд░рдЦреЗ рдЬрд╛рддреЗ рдереЗред рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЖрд░ рднрд╛рд╖рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдХрд╛ рдореБрдЭреЗ рдХреБрдЫ рдЕрдиреБрднрд╡ рдерд╛ред


рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рдерд╛, рдореБрдЦреНрдп рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ (рдЗрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ), рд╕рд╛рде рд╣реА vSphere рд▓реЙрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг vm рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рдордп рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, IDE RStudio рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рдкреЙрд╡рд░рд╢реЗрд▓ ISE тАЛтАЛрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд┐рдВрдбреЛрдЬ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрдиред


рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред


  • рд╣рдо PowerShell рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕реАрдПрд╕рд╡реА рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рд╣реИред рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░ рд╕реЗ рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕реЗ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдбреНрд░рд╛рдЗрд╡ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рд╕реАрдПрд╕рд╡реА рдХреЗ рд╕рд╛рде рднреА рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдФрд░ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ)ред
  • R рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдз рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдореВрд▓реНрдп рд╣рдо рдЬрд╛рдБрдЪ рд░рд╣реЗ рд╣реИрдВред - рд╣рдо рдПрдХ рд╢рдмреНрдж рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрди рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕реВрдЪрдирд╛ рдкрддреНрд░ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рд╣реЛрдЧрд╛ "рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рднрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?"
  • рд╣рдо рдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдПрд╕рд╡реА рд╕реЗ рд╕рднреА рд╡реАрдПрдо рдкрд░ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕реВрдЪрдирд╛ xlsx рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╡реАрдПрдо рдкрд░ рд╕рд╛рд░рд╛рдВрд╢ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
  • рд╕рднреА рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЦреЗрддреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднрд░реЗ рд╣реБрдП рдЦреЗрддреЛрдВ (рдФрд░ рдХреЗрд╡рд▓ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ) рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рд╡реАрдПрдо рдпреБрдХреНрдд рдПрдХ рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
  • VMs рдХреА рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪреА рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп PowerShell рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ VM рдирд┐рд░реНрдорд╛рдг рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП vCenter рд▓реЙрдЧ рдХреЛ рджреЗрдЦреЗрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ VM рдФрд░ рдЗрдЪреНрдЫрд┐рдд рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдпрд╣ рдорд╛рдорд▓рд╛ рддрдм рд╣реИ рдЬрдм рдХреЛрдИ рднреА рдХрдмреВрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдХрд┐рд╕рдХреА рдХрд╛рд░ рд╣реИред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЙрдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ 2 рд╣рдлреНрддреЛрдВ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд╡реАрдПрдо рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдЗрд╕ рддрдВрддреНрд░ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рд╕реАрдПрд╕рд╡реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЖрд░ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╣рдо рдПрдХ рд╕реБрдВрджрд░ рд╕реНрд╡рд░реВрдкрд┐рдд xlsx рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднрд░реЗ рд╣реБрдП рдЦреЗрддреЛрдВ рдХреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреБрдЫ рд╕реНрддрдВрднреЛрдВ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдХрдерд┐рдд рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рд╡рд╛рд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдо рдФрд░ VM рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рд╣рдо рдПрдХ рдИрдореЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо рдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднрд░реА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд░рдЦрддреЗ рд╣реИрдВред рдкрд╛рда рдореЗрдВ рд╣рдо рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╡реАрдПрдо рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛, рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд▓рд┐рдВрдХ рдФрд░ рдПрдХ рдкреНрд░реЗрд░рдХ рдЫрд╡рд┐ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯреЗрдб рд╡реАрдПрдо рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдФрд░ рдкрддреНрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рд╣рд░реНрд╖рд┐рдд рдкреНрд░реЗрд░рдХ рдЪрд┐рддреНрд░ рд╣реЛрддрд╛ рд╣реИред
  • рд╣рдо SQL рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рднреА рд╡реАрдПрдо рдкрд░ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рддрдВрддреНрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП (рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рддрдВрддреНрд░ - рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ)

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ


рдЖрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓
#     (       ) setwd("C:\\Scripts\\getVm") ####    #### library(tidyverse) library(xlsx) library(mailR) library(rmarkdown) #####         ##### source(file = "const.R", local = T, encoding = "utf-8") #        ,  . if (file.exists(filenameVmCreationRules)) {file.remove(filenameVmCreationRules)} ####       render("VM_name_rules.Rmd", output_format = word_document(), output_file = filenameVmCreationRules) #        ,   if (file.exists(allVmXlsxPath)) {file.remove(allVmXlsxPath)} ####       PowerShell .    csv. system(paste0("powershell -File ", getVmPsPath)) #  df fullXslx_df <- allVmXlsxPath %>% read.csv2(stringsAsFactors = FALSE) #     full_df <- fullXslx_df %>% mutate( #       ,    ,      , isSubsystemCorrect = Subsystem %>% gsub("[[:space:]]", "", .) %>% str_split(., ",") %>% map(function(x) (all(x %in% AllowedValues$Subsystem))) %>% as.logical(), isOwnerCorrect = Owner %in% AllowedValues$Owner, isCategoryCorrect = Category %in% AllowedValues$Category, isCreatorCorrect = (!is.na(Creator) & Creator != ''), isCreation.DateCorrect = map(Creation.Date, IsDate) ) #        ,  . if (file.exists(filenameAll)) {file.remove(filenameAll)} ####  xslx    #### #      full_df %>% write.xlsx(file=filenameAll, sheetName=names[1], col.names=TRUE, row.names=FALSE, append=FALSE) ####  xslx      #### #  df incorrect_df <- full_df %>% select(VM.Name, IP.s, Owner, Subsystem, Creator, Category, Creation.Date, isOwnerCorrect, isSubsystemCorrect, isCategoryCorrect, isCreatorCorrect, vCenter.Name) %>% filter(isSubsystemCorrect == F | isOwnerCorrect == F | isCategoryCorrect == F | isCreatorCorrect == F) #        ,  . if (file.exists(filenameIncVM)) {file.remove(filenameIncVM)} #   VM     csv incorrect_df %>% select(VM.Name) %>% write_csv2(path = filenameIncVM, append = FALSE) #      incorrect_df_filtered <- incorrect_df %>% select(VM.Name, IP.s, Owner, Subsystem, Category, Creator, vCenter.Name, Creation.Date ) #    numberOfRows <- nrow(incorrect_df) ####   #### #        ,  . #   -     if (numberOfRows > 0) { #       ,  . if (file.exists(creatorsFilePath)) {file.remove(creatorsFilePath)} #  PowerShell ,     VM.    csv. system(paste0("powershell -File ", getCreatorsPath)) #     creators_df <- creatorsFilePath %>% read.csv2(stringsAsFactors = FALSE) #     ,       incorrect_df_filtered <- incorrect_df_filtered %>% select(VM.Name, IP.s, Owner, Subsystem, Category, Creator, vCenter.Name, Creation.Date ) %>% left_join(creators_df, by = "VM.Name") %>% rename(` ` = CreatedBy, `  ` = CreatedOn) #    emailBody <- paste0( '<html> <h3> ,  .</h3> <p>           H:  :<p> <p>\\\\server.ru\\VM\\', sourceFileFormat, '</p> <p>      <strong> </strong> .   <strong>', numberOfRows,'</strong>.</p> <p>   2  . <strong> </strong>  <strong>  </strong>,     vCenter   2 </p> <p>        .      </p> <p><img src="data/meme.jpg"></p> </html>' ) #    if (file.exists(filenameIncorrect)) {file.remove(filenameIncorrect)} #       .. source(file = "email.R", local = T, encoding = "utf-8") ####       #### send.mail(from = emailParams$from, to = emailParams$to, subject = "    ", body = emailBody, encoding = "utf-8", html = TRUE, inline = TRUE, smtp = emailParams$smtpParams, authenticate = TRUE, send = TRUE, attach.files = c(filenameIncorrect, filenameVmCreationRules), debug = FALSE) ####   ,      #### } else { #    emailBody <- paste0( '<html> <h3> ,  </h3> <p>           H:  :<p> <p>\\\\server.ru\\VM\\', sourceFileFormat, '</p> <p>,   ,     </p> <p><img src="data/meme_correct.jpg"></p> </html>' ) ####      VM #### send.mail(from = emailParams$from, to = emailParams$to, subject = " ", body = emailBody, encoding = "utf-8", html = TRUE, inline = TRUE, smtp = emailParams$smtpParams, authenticate = TRUE, send = TRUE, debug = FALSE) } #######     ##### source(file = "DB.R", local = T, encoding = "utf-8") 

PowerShell рдкрд░ vm рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ
 #       $vCenterNames = @( "vcenter01", "vcenter02", "vcenter03" ) $vCenterUsername = "myusername" $vCenterPassword = "mypassword" $filename = "C:\Scripts\getVm\data\allvm\all-vm-$(get-date -f yyyy-MM-dd).csv" $destinationSMB = "\\server.ru\myfolder$\vm" $IP0="" $IP1="" $IP2="" $IP3="" $IP4="" $IP5="" #    vCenter,    .  ,      (, ) Connect-VIServer -Server $vCenterNames -User $vCenterUsername -Password $vCenterPassword write-host "" #       vCenter- function Get-VMinventory { #       ,   $AllVM = Get-VM | Sort Name $cnt = $AllVM.Count $count = 1 #            foreach ($vm in $AllVM) { $StartTime = $(get-date) $IP0 = $vm.Guest.IPAddress[0] $IP1 = $vm.Guest.IPAddress[1] $IP2 = $vm.Guest.IPAddress[2] $IP3 = $vm.Guest.IPAddress[3] $IP4 = $vm.Guest.IPAddress[4] $IP5 = $vm.Guest.IPAddress[5] If ($IP0 -ne $null) {If ($IP0.Contains(":") -ne 0) {$IP0=""}} If ($IP1 -ne $null) {If ($IP1.Contains(":") -ne 0) {$IP1=""}} If ($IP2 -ne $null) {If ($IP2.Contains(":") -ne 0) {$IP2=""}} If ($IP3 -ne $null) {If ($IP3.Contains(":") -ne 0) {$IP3=""}} If ($IP4 -ne $null) {If ($IP4.Contains(":") -ne 0) {$IP4=""}} If ($IP5 -ne $null) {If ($IP5.Contains(":") -ne 0) {$IP5=""}} $cluster = $vm | Get-Cluster | Select-Object -ExpandProperty name $Bootime = $vm.ExtensionData.Runtime.BootTime $TotalHDDs = $vm.ProvisionedSpaceGB -as [int] $CreationDate = $vm.CustomFields.Item("CreationDate") -as [string] $Creator = $vm.CustomFields.Item("Creator") -as [string] $Category = $vm.CustomFields.Item("Category") -as [string] $Owner = $vm.CustomFields.Item("Owner") -as [string] $Subsystem = $vm.CustomFields.Item("Subsystem") -as [string] $IPS = $vm.CustomFields.Item("IP") -as [string] $vCPU = $vm.NumCpu $CorePerSocket = $vm.ExtensionData.config.hardware.NumCoresPerSocket $Sockets = $vCPU/$CorePerSocket $Id = $vm.Id.Split('-')[2] -as [int] #       $Vmresult = New-Object PSObject $Vmresult | add-member -MemberType NoteProperty -Name "Id" -Value $Id $Vmresult | add-member -MemberType NoteProperty -Name "VM Name" -Value $vm.Name $Vmresult | add-member -MemberType NoteProperty -Name "Cluster" -Value $cluster $Vmresult | add-member -MemberType NoteProperty -Name "Esxi Host" -Value $VM.VMHost $Vmresult | add-member -MemberType NoteProperty -Name "IP Address 1" -Value $IP0 $Vmresult | add-member -MemberType NoteProperty -Name "IP Address 2" -Value $IP1 $Vmresult | add-member -MemberType NoteProperty -Name "IP Address 3" -Value $IP2 $Vmresult | add-member -MemberType NoteProperty -Name "IP Address 4" -Value $IP3 $Vmresult | add-member -MemberType NoteProperty -Name "IP Address 5" -Value $IP4 $Vmresult | add-member -MemberType NoteProperty -Name "IP Address 6" -Value $IP5 $Vmresult | add-member -MemberType NoteProperty -Name "vCPU" -Value $vCPU $Vmresult | Add-Member -MemberType NoteProperty -Name "CPU Sockets" -Value $Sockets $Vmresult | Add-Member -MemberType NoteProperty -Name "Core per Socket" -Value $CorePerSocket $Vmresult | add-member -MemberType NoteProperty -Name "RAM (GB)" -Value $vm.MemoryGB $Vmresult | add-member -MemberType NoteProperty -Name "Total-HDD (GB)" -Value $TotalHDDs $Vmresult | add-member -MemberType NoteProperty -Name "Power State" -Value $vm.PowerState $Vmresult | add-member -MemberType NoteProperty -Name "OS" -Value $VM.ExtensionData.summary.config.guestfullname $Vmresult | Add-Member -MemberType NoteProperty -Name "Boot Time" -Value $Bootime $Vmresult | add-member -MemberType NoteProperty -Name "VMTools Status" -Value $vm.ExtensionData.Guest.ToolsStatus $Vmresult | add-member -MemberType NoteProperty -Name "VMTools Version" -Value $vm.ExtensionData.Guest.ToolsVersion $Vmresult | add-member -MemberType NoteProperty -Name "VMTools Version Status" -Value $vm.ExtensionData.Guest.ToolsVersionStatus $Vmresult | add-member -MemberType NoteProperty -Name "VMTools Running Status" -Value $vm.ExtensionData.Guest.ToolsRunningStatus $Vmresult | add-member -MemberType NoteProperty -Name "Creation Date" -Value $CreationDate $Vmresult | add-member -MemberType NoteProperty -Name "Creator" -Value $Creator $Vmresult | add-member -MemberType NoteProperty -Name "Category" -Value $Category $Vmresult | add-member -MemberType NoteProperty -Name "Owner" -Value $Owner $Vmresult | add-member -MemberType NoteProperty -Name "Subsystem" -Value $Subsystem $Vmresult | add-member -MemberType NoteProperty -Name "IP's" -Value $IPS $Vmresult | add-member -MemberType NoteProperty -Name "vCenter Name" -Value $vm.Uid.Split('@')[1].Split(':')[0] #           .   ,      . $elapsedTime = $(get-date) - $StartTime $totalTime = "{0:HH:mm:ss}" -f ([datetime]($elapsedTime.Ticks*($cnt - $count))) clear-host Write-Host "Processing" $count "from" $cnt Write-host "Progress:" ([math]::Round($count/$cnt*100, 2)) "%" Write-host "You have about " $totalTime "for cofee" Write-host "" $count++ #  ,   ""       $Vmresult } } #         csv $allVm = Get-VMinventory | Export-CSV -Path $filename -NoTypeInformation -UseCulture -Force #         ,   ,  . try { Copy-Item $filename -Destination $destinationSMB -Force -ErrorAction SilentlyContinue } catch { $error | Export-CSV -Path $filename".error" -NoTypeInformation -UseCulture -Force } 

PowerShell рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓реЙрдЧ рдФрд░ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреА рд╣реИ
 #   ,      VM $VMfilePath = "C:\Scripts\getVm\creators_VM\creators_VM_$(get-date -f yyyy-MM-dd).csv" #   ,      $filePath = "C:\Scripts\getVm\data\creators\creators-$(get-date -f yyyy-MM-dd).csv" #   Workflow GetCreators-Wf { # ,        param([string[]]$VMfilePath) # ,     workflow $vCenterUsername = "myusername" $vCenterPassword = "mypassword" $daysToLook = 14 $start = (get-date).AddDays(-$daysToLook) $finish = get-date # ,     csv  ,       $UnknownUser = "UNKNOWN" $UnknownCreatedTime = "0000-00-00" #      ,      . $vCenterNames = @( "vcenter01", "vcenter02", "vcenter03" ) #   VM  csv     $list = Import-Csv $VMfilePath -UseCulture | select -ExpandProperty VM.Name # ,     ( 5   ) foreach -parallel ($row in $list) { #  ,       ,     $Using InlineScript { #      $StartTime = $(get-date) Write-Host "" Write-Host "Processing $Using:row started at $StartTime" Write-Host "" #    ,         $con = Connect-VIServer -Server $Using:vCenterNames -User $Using:vCenterUsername -Password $Using:vCenterPassword #   vm $vm = Get-VM -Name $Using:row #  2  .     ,  - .   , $Event = $vm | Get-VIEvent -Start $Using:start -Finish $Using:finish -Types Info | Where { $_.Gettype().Name -eq "VmBeingDeployedEvent" -or $_.Gettype().Name -eq "VmCreatedEvent" -or $_.Gettype().Name -eq "VmRegisteredEvent" -or $_.Gettype().Name -eq "VmClonedEvent"} # $Event = $vm | Get-VIEvent -Types Info | Where { $_.Gettype().Name -eq "VmBeingDeployedEvent" -or $_.Gettype().Name -eq "VmCreatedEvent" -or $_.Gettype().Name -eq "VmRegisteredEvent" -or $_.Gettype().Name -eq "VmClonedEvent"} #      ,      - If (($Event | Measure-Object).Count -eq 0){ $User = $Using:UnknownUser $Created = $Using:UnknownCreatedTime $CreatedFormat = $Using:UnknownCreatedTime } Else { If ($Event.Username -eq "" -or $Event.Username -eq $null) { $User = $Using:UnknownUser } Else { $User = $Event.Username } # Else $CreatedFormat = $Event.CreatedTime #     ,      ,   .      . $Created = $Event.CreatedTime.ToString('yyyy-MM-dd') } # Else Write-Host "Creator for $vm is $User. Creating object." #  .  . $Vmresult = New-Object PSObject $Vmresult | add-member -MemberType NoteProperty -Name "VM Name" -Value $vm.Name $Vmresult | add-member -MemberType NoteProperty -Name "CreatedBy" -Value $User $Vmresult | add-member -MemberType NoteProperty -Name "CreatedOn" -Value $CreatedFormat $Vmresult | add-member -MemberType NoteProperty -Name "CreatedOnFormat" -Value $Created #   $Vmresult } # Inline } # ForEach } $Creators = GetCreators-Wf $VMfilePath #     $Creators | select 'VM Name', CreatedBy, CreatedOn | Export-Csv -Path $filePath -NoTypeInformation -UseCulture -Force Write-Host "CSV generetion finisghed at $(get-date). PROFIT" 

Xlsx рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬрд┐рд╕рдиреЗ рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд▓рдЧреНрдирдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдиреБрдЕрд▓ рдкрд╕рдВрдж рд╣реИ), рдФрд░ рди рдХреЗрд╡рд▓ рдПрдХ рд╕реАрдПрд╕рд╡реА рддрд╛рд▓рд┐рдХрд╛ред


рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рднрд░реА рдорд╢реАрдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрдВрджрд░ xlsx рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдирд╛
 #    #   : "xls"  "xlsx" wb<-createWorkbook(type="xlsx") #         TABLE_ROWNAMES_STYLE <- CellStyle(wb) + Font(wb, isBold=TRUE) TABLE_COLNAMES_STYLE <- CellStyle(wb) + Font(wb, isBold=TRUE) + Alignment(wrapText=TRUE, horizontal="ALIGN_CENTER") + Border(color="black", position=c("TOP", "BOTTOM"), pen=c("BORDER_THIN", "BORDER_THICK")) #    sheet <- createSheet(wb, sheetName = names[2]) #   addDataFrame(incorrect_df_filtered, sheet, startRow=1, startColumn=1, row.names=FALSE, byrow=FALSE, colnamesStyle = TABLE_COLNAMES_STYLE, rownamesStyle = TABLE_ROWNAMES_STYLE) #  ,     autoSizeColumn(sheet = sheet, colIndex=c(1:ncol(incorrect_df))) #   addAutoFilter(sheet, cellRange = "C1:G1") #   fo2 <- Fill(foregroundColor="red") cs2 <- CellStyle(wb, fill = fo2, dataFormat = DataFormat("@")) #              rowsOwner <- getRows(sheet, rowIndex = (which(!incorrect_df$isOwnerCorrect) + 1)) cellsOwner <- getCells(rowsOwner, colIndex = which( colnames(incorrect_df_filtered) == "Owner" )) lapply(names(cellsOwner), function(x) setCellStyle(cellsOwner[[x]], cs2)) #              rowsSubsystem <- getRows(sheet, rowIndex = (which(!incorrect_df$isSubsystemCorrect) + 1)) cellsSubsystem <- getCells(rowsSubsystem, colIndex = which( colnames(incorrect_df_filtered) == "Subsystem" )) lapply(names(cellsSubsystem), function(x) setCellStyle(cellsSubsystem[[x]], cs2)) #    rowsCategory <- getRows(sheet, rowIndex = (which(!incorrect_df$isCategoryCorrect) + 1)) cellsCategory <- getCells(rowsCategory, colIndex = which( colnames(incorrect_df_filtered) == "Category" )) lapply(names(cellsCategory), function(x) setCellStyle(cellsCategory[[x]], cs2)) #  rowsCreator <- getRows(sheet, rowIndex = (which(!incorrect_df$isCreatorCorrect) + 1)) cellsCreator <- getCells(rowsCreator, colIndex = which( colnames(incorrect_df_filtered) == "Creator" )) lapply(names(cellsCreator), function(x) setCellStyle(cellsCreator[[x]], cs2)) #   saveWorkbook(wb, filenameIncorrect) 

рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:




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


рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрд░ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рд╢реЗрдбреНрдпреВрд▓рд░ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рддрд╛ рд╣реИ
 library(taskscheduleR) myscript <- file.path(getwd(), "all_vm.R") ##    62  taskscheduler_create(taskname = "getAllVm", rscript = myscript, schedule = "ONCE", starttime = format(Sys.time() + 62, "%H:%M")) ##      09:10 taskscheduler_create(taskname = "getAllVmDaily", rscript = myscript, schedule = "WEEKLY", days = c("MON", "TUE", "WED", "THU", "FRI"), starttime = "02:00") ##   taskscheduler_delete(taskname = "getAllVm") taskscheduler_delete(taskname = "getAllVmDaily") #   ( 4 ) tail(readLines("all_vm.log"), sep ="\n", n = 4) 

рдЕрд▓рдЧ рд╕реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдиреНрдп рдкреНрд░рд╢реНрди рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд╣ рджрд┐рдирд╛рдВрдХ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрдм VM рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ vCenter рдореЗрдВ рд▓реЙрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╣рдиреЗ рд╣реБрдП рдереЗред рдЪреВрдВрдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рд░ рджрд┐рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдл рдирд╣реАрдВ рдХрд░рддреА рд╣реИ (рд╣рдо рдпрд╛рдж рд░рдЦрдиреЗ рдкрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ), рдЖрдк рдкреБрд░рд╛рдиреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реА рдлрд╛рдЗрд▓ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╡реАрдПрдо рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рд╢рд╛рдВрдд рдирд╣реАрдВ рд╣реИред


рдореИрдВ рдПрдХ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред


MS SQL SERVER рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдИ - рдПрдХ рд╕рд┐рд╕реНрдЯрдо-рд╡рд░реНрдЬрди рдЯреЗрдореНрдкреЛрд░рд▓ рдЯреЗрдмрд▓ред рдЗрд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдЕрд╕реНрдерд╛рдпреА (рдЧреИрд░-рдЕрд╕реНрдерд╛рдпреА) рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Microsoft рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рд╣рдо рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ рдФрд░ SQL рд╕рд░реНрд╡рд░ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 2 рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рдХреЙрд▓рдо рдмрдирд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕ рддрд╛рд░реАрдЦ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐) рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рд╕рд░рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рд╣рдо рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдпрд╛ рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рд╕рднреА рд╡реАрдПрдо рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред


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


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


рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░ рдХреЛрдб
 #   library(odbc) library(compareDF) #   con <- dbConnect(odbc(), Driver = "ODBC Driver 13 for SQL Server", Server = DBParams$server, Database = DBParams$database, UID = DBParams$UID, PWD = DBParams$PWD, Port = 1433) ####    .   - . #### if (!dbExistsTable(con, DBParams$TblName)) { ####   #### create <- dbSendStatement( con, paste0( 'CREATE TABLE ', DBParams$TblName, '( [Id] [int] NOT NULL PRIMARY KEY CLUSTERED, [VM.Name] [varchar](255) NULL, [Cluster] [varchar](255) NULL, [Esxi.Host] [varchar](255) NULL, [IP.Address.1] [varchar](255) NULL, [IP.Address.2] [varchar](255) NULL, [IP.Address.3] [varchar](255) NULL, [IP.Address.4] [varchar](255) NULL, [IP.Address.5] [varchar](255) NULL, [IP.Address.6] [varchar](255) NULL, [vCPU] [int] NULL, [CPU.Sockets] [int] NULL, [Core.per.Socket] [int] NULL, [RAM..GB.] [int] NULL, [Total.HDD..GB.] [int] NULL, [Power.State] [varchar](255) NULL, [OS] [varchar](255) NULL, [Boot.Time] [varchar](255) NULL, [VMTools.Status] [varchar](255) NULL, [VMTools.Version] [int] NULL, [VMTools.Version.Status] [varchar](255) NULL, [VMTools.Running.Status] [varchar](255) NULL, [Creation.Date] [varchar](255) NULL, [Creator] [varchar](255) NULL, [Category] [varchar](255) NULL, [Owner] [varchar](255) NULL, [Subsystem] [varchar](255) NULL, [IP.s] [varchar](255) NULL, [vCenter.Name] [varchar](255) NULL, DateFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL, DateTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME (DateFrom, DateTo) ) ON [PRIMARY] WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = ', DBParams$TblHistName,'));' ) ) #    dbClearResult(create) } # if ####     #### #  ,     allVM_db_con <- tbl(con, DBParams$TblName) ####   #### #     (   ) allVM_db <- allVM_db_con %>% select(c(-"DateTo", -"DateFrom")) %>% collect() #     .   Id #       -,   +,   -  + ctable_VM <- fullXslx_df %>% compare_df(allVM_db, c("Id")) ####   #### #  Id ,      remove_Id <- ctable_VM$comparison_df %>% filter(chng_type == "-") %>% select(Id) # ,    (   -     ) if (remove_Id %>% nrow() > 0) { #        delete <- dbSendStatement(con, paste0(' DELETE FROM ', DBParams$TblName, ' WHERE "Id"=? ') # paste ) # send #      dbBind(delete, remove_Id) #    dbClearResult(delete) } # if ####   #### #  ,  ,   . allVM_add <- ctable_VM$comparison_df %>% filter(chng_type == "+") %>% select(-chng_type) # ,   ,      (  -  ) if (allVM_add %>% nrow() > 0) { #       dbWriteTable(con, DBParams$TblName, allVM_add, overwrite = FALSE, append = TRUE) } # if ####     #### dbDisconnect(con) 

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


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


рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдЬрд░реНрд╡ рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ "рдШреБрдЯрдиреЗ рдкрд░" рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдФрд░, рдХреЛрдИ рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддрд╛ рд╣реИред


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


Source: https://habr.com/ru/post/hi454400/


All Articles