рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреИрд╕реЗ рдХрд░реЗрдВ? рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВ

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

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред




рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдбрдмрд▓ рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░ рднреАред

рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

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

рддреЛ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдирдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрдХ рдХреЛ рдХреНрдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:



рд╡реАрдПрдо рд╡рд┐рд╡рд░рдг: рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╡рд┐рд╡рд░рдг
рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ, PowerShell 5.1 рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Windows- рдХреЗрд╡рд▓, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдпреВрдирд┐рдХреНрд╕ рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдФрд░ PowerShell Core рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдУрдПрд╕ , рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдоред Windows 2008 (R2) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдмрд╛рдзрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо 2012R2 рдпрд╛ 2016 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

VM рдЖрдХрд╛рд░ , рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЖрдХрд╛рд░ред рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд▓рдШреБ 1CPU-4Gb рд░рд╛рдо, рдордзреНрдпрдо 2CPU-8Gb, рдмрдбрд╝реЗ 4-16ред

VM рд╕рдВрдЧреНрд░рд╣рдг , рдбрд┐рд╕реНрдХ 0 (C: \) рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдлрд╛рд╕реНрдЯ / рд╕реНрд▓реЛ рд╕реНрдЯреЛрд░реЗрдЬ рдЪрдпрдирдХрд░реНрддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИред "рдлрд╛рд╕реНрдЯ" рдПрд╕рдПрд╕рдбреА рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реЗрдЬ рдЯрд┐рдпрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ "рд╕реНрд▓реЛ" рдХреЛ "рдирд┐рдпрдорд┐рдд" рдПрдЪрдбреАрдбреА (рдмреЗрд╢рдХ, рд╕реИрди) рдкрд░ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Disk1 (Disk2 рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж) рдореЗрдВ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЖрдХрд╛рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб, рд╡рд┐рднрд╛рдЬрди рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрддреНрд░ (рдЬреЛ SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ) рд╣реИред

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЗрдВ , рд╣рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдорд╢реАрди рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде рдбреЛрдореЗрди-рдЬреЙрдЗрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

(SLA) рд╕реЗрд╡рд╛ рд╕реНрддрд░ рд╕рдордЭреМрддрд╛ , рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЪрдпрдирд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рд╛рд░реВрдк рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛, рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг ITSM ServiceNow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рдкреНрд░рдмрдВрдзрдХ, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдорд╛рдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, "рдСрд░реНрдбрд░" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж ServiceNow рд╣рдорд╛рд░реА PowerShell рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд┐рд╕рдСрди) рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ JSON рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛ред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

.\CreateConfiguration.ps1 -SecurityZone trusted -VMDescription "VM for CRM System" -Requestor "evgeniy.vpro" -OSVersion 2k16 -OSEdition Standard -BuildNewVM -VMEnvironment Prod -VMServiceLevel GOLD -VMSize Medium -Disk0Tier Fast -Disk1Size 50 -Disk1Tier Eco -Disk1Letter D -MSSQLServer -MSSQLInstanceName "Instance1" -SQLCollation Latin1_General_CI_AS -SQLEdition Standard -Disk2Size 35 -Disk3Size 65 


CreateConfiguration .ps1 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ:

 # PowerShell- $config = [ordered]@{} #    . $config.SecurityZone=$SecurityZone 


рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЛ JSON рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ:

 $ServerConfig = New-Object тАУTypeName PSObject $config ConvertTo-Json -InputObject $ServerConfig -Depth 100 | Out-File "C:\Configs\TargetNodes\Build\$($Hostname.ToLower()).json" -Force 


рдирдореВрдирд╛ рд╡рд┐рдиреНрдпрд╛рд╕:

 { "Hostname": "dsctest552", "SecurityZone": "trusted", "Domain": "testdomain", "Requestor": "evgeniy.vpro", "VM": { "Size": "Medium", "Environment": "Prod", "SLA": "GOLD", "DbEngine": "MSSQL", "RAM": 8, "Storage": [ { "Id": 0, "Tier": "Fast", "Size": "100", "Allocation": 4, "Letter": "C" }, { "Id": 1, "Tier": "Eco", "Size": 50, "Label": "Data", "Allocation": 64, "Letter": "D" }, { "Id": 2, "Tier": "Fast", "Size": 35, "Label": "Data", "Allocation": 64, "Letter": "E" }, { "Id": 3, "Tier": "Fast", "Size": 65, "Label": "Data", "Allocation": 64, "Letter": "F" } ] }, "Network": { "MAC": "", "IP": "10.230.168.50", "Gateway": "10.230.168.1", "VLAN": тАЬVLAN168тАЭ }, "OS": { "Version": "2k16", "Edition": "Standard", "Administrators": [ "LocaAdmin", "testdomain\\ Security-LocalAdmins" ] }, "OU": "OU=Servers,OU=Staging,DC=testdomain", "Applications": [ { "Application": "Microsoft SQL Server 2016", "InstanceName": "vd", "Collation": "Latin1_General_CI_AS", "Edition": "Standard", "Features": "SQLENGINE", "Folders": { "DataRoot": "E:\\MSSQL", "UserDB": "E:\\MSSQL\\MSSQL11.vd\\MSSQL\\Data", "UserLog": "E:\\MSSQL\\MSSQL11.vd\\MSSQL\\Log", "TempDB": "D:\\MSSQL\\MSSQL11.vd\\MSSQL\\TempDB", "TempDBLog": "D:\\MSSQL\\MSSQL11.vd\\MSSQL\\TempDB", "Backup": "E:\\MSSQL\\MSSQL11.vd\\MSSQL\\Backup" }, "MaxMemory": 2147483647 } ], "Description": "VM for CRM", "Certificate": { "File": null, "Thumbprint": null }, "Version": 0 } 


рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗрдм рдлреЙрд░реНрдо рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдирд╛рдо рдФрд░ IP рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

рдорд╢реАрди рдХрд╛ рдирд╛рдо , ITSM ServiceNow рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЦрдВрдб рд╣реИ: CMDB (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рдбреЗрдЯрд╛ рдмреЗрд╕), рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореМрдЬреВрджрд╛ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ, рдЙрдирдХреА рд╕реНрдерд┐рддрд┐, рд╕рдорд░реНрдерди рдЯреАрдо рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ 200 рдмреИрдХрдЕрдк рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдП рд╣реИрдВред рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо CMDB рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ "рдореБрдХреНрдд" рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рд░рд╛рд╢рд┐ рд╕реЗ рд▓рдВрдмрд┐рдд рдЗрдВрд╕реНрдЯреЙрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред

рдЖрдИрдкреА тАЛтАЛрдПрдбреНрд░реЗрд╕ рдФрд░ рд╡реАрдПрд▓рдПрдПрди , рд╣рдордиреЗ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЖрдИрдкреАрдПрдПрдо рддреИрдирд╛рдд рдХрд┐рдпрд╛ - рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2016 рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ IPAM (DHCP, DNS, AD) рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдИрдкреА рдкрддреЗ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред JSON рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдмрдиреЗрдЯ рдкрд░ рдкрд╣рд▓реЗ рдореБрдлреНрдд рдЖрдИрдкреА рдкрддреЗ рдХреЗ рд▓рд┐рдП IPAM рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИред рдФрд░ VLAN рд╕рдмрдиреЗрдЯ (x / 24 рд╕рдмрдиреЗрдЯ) рдХрд╛ рдЪрдпрди рдЪрдпрдирд┐рдд SLA, рдкрд░реНрдпрд╛рд╡рд░рдг, рдЯреНрд░рд╕реНрдЯ рдФрд░ рдЯрд╛рдЗрдк рд╡реИрд▓реНрдпреВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рд╣реИ, рд╕рднреА рдлрд╝реАрд▓реНрдб рдЬрдЧрд╣ рдореЗрдВ рд╣реИрдВ, рдЖрдк рдПрдХ рдорд╢реАрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ, "рд╣рдорд╛рд░реА рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ?"ред рд╣рдо рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдкреНрд░рдмрдВрдзрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреИрдХреЗрдЬ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдВрдбреЛрдЬ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдореИрдиреЗрдЬрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

 New-StoredCredential -Target "ESXi" -UserName "testdomain.eu\vmwareadm" -Password "veryultraP@ssw00rd." -Type Generic -Persist LocalMachine 


рдкрд╛рд╕рд╡рд░реНрдб рдЗрд╕ рдорд╢реАрди рдФрд░ рдЦрд╛рддреЗ рдХреЗ рднреАрддрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

 $ESXiAdmin = Get-StoredCredential -Type Generic -Target ESXi 


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░реНрд╡рд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЬреАрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рдЕрдм рд╣рдо рдордЬрд╝рдмреВрддреА рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдХреМрди, рдХреНрдпрд╛, рдХрд╣рд╛рдБ рдФрд░ рдХрдмред

рдЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЦреЗрдВред

15 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рд╡рд┐рдВрдбреЛрдЬ EventLog рдХреЛ рд▓рд┐рдЦ рджреЗрдЧрд╛ рдХрд┐ рдПрдХ рдирдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред

рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реА рд╕реНрд╡рд░реВрдкрдг рд╣реИ:

 $Configuration=(Get-Content -Raw $File | Out-String | ConvertFrom-Json) 


рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдорд╢реАрди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдмрд┐рд▓реНрдб рд╡реАрдПрдо.рдкреНрд╕ 1 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред

BuildVM.ps1 рдореЗрдВ, рд╣рдо рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ: рдЖрдХрд╛рд░, рдПрдирд╡реА, рдПрд╕рдПрд▓рдП, рдкреНрд░рдХрд╛рд░, рднрдВрдбрд╛рд░рдг, рд░реИрдо, рдиреЗрдЯрд╡рд░реНрдХред

рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рд╡рд╛рд▓реА рдорд╢реАрди (CheckVM.ps1) рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдЕрд╡рд╢реНрдп рдХрд░реЗрдВред
рд╣рдо VMWare PowerShell CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ vSphere рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ:

 $VmWareAdmin = Get-StoredCredential -Type Generic -Target ESXi Connect-VIServer -Server "vSphereSrv" -Credential $VmWareAdmin | Out-Null 


рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рд╣реИ

 $VM=Get-VM $server -ErrorAction SilentlyContinue 


рдФрд░ рдмрдВрдж рдХрд░реЗрдВ:

 Disconnect-VIServer * -Force -Confirm:$false 


рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдорд╢реАрди WinRM рдкрд░ рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ

 $ping=Test-NetConnection -ComputerName $Configuration.Hostname -CommonTCPPort WINRM -InformationLevel Quiet -ErrorAction SilentlyContinue 


рдпрджрд┐ $ VM рдФрд░ $ рдкрд┐рдВрдЧ рдЦрд╛рд▓реА рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдирдИ рдорд╢реАрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред (рд╣рдо рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рдЬрдм рдИрдПрд╕рдПрдХреНрд╕рдЖрдИ рдореЗрдВ рдПрдХ рдорд╢реАрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдпрд╛ рдпрд╣ рдорд╢реАрди рджреВрд╕рд░реЗ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рдореЗрдВ рд╣реЛрддреА рд╣реИред

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


рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдирд╛


рд╕рдВрдмрдВрдзрд┐рдд SLR рдХреНрд▓рд╕реНрдЯрд░ рдЦреЛрдЬреЗрдВ:

 $Cluster=Get-Cluster -Name $Configuration.VM.SLA 


рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд╛рдЯрд╕реНрдЯреЛрд░ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЧрд╣ рд╣реИ:

 $DatastoreCluster = Get-DatastoreCluster |Where-Object {$_.Name -like $Datastore1Name} $Datastore1 = Get-Datastore -Location $DatastoreCluster |sort -Property "FreeSpaceGB" |select -Last 1 IF ($Datastore1.FreeSpaceGB -le "200"){ Write-Host -foreground red "STOP: Not enough datastore capacity for DISK" $vdisk.Id Break } 


рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА:

 $VMHost = Get-VMHost -Location $Cluster |sort -Property "MemoryUsageGB" |select -First 1 IF ($VMHost.MemoryUsageGB -le "20"){ Write-Host -foreground red "STOP: No enough ESXi host capacity" Break } 


рд╣рдо рдЕрдкрдирд╛ рдЦрд╛рдХрд╛ рд▓реЗрддреЗ рд╣реИрдВ

 $VMTemplate = Get-Template -Name 'Win2016_Std_x64_Template' 


рдФрд░ рдПрдХ рдирдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдПрдВ

 New-VM -Name $Configuration.Hostname.ToUpper() -VMHost $VMHost -ResourcePool $ResourcePool -Datastore $Datastore -Template $VMTemplate -Location "AutoDeployed VMs" 


рдбреАрдПрдЪрд╕реАрдкреА рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдмрдиреЗрдЯ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

 Start-VM $VM 


рдФрд░ рдорд╢реАрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдмрдЪрд╛рдПрдВ, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЖрдк VMWare рд╕реНрддрд░ рдкрд░ рдорд╢реАрди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред

 Set-Annotation -Entity $VM -CustomAttribute "Change request" -Value $Configuration.Request -Confirm:$false Set-VM $VM -Notes $Configuration.Description -Confirm:$false 


рдорд╢реАрди рд╢реБрд░реВ рд╣реЛ рдЧрдИ рдФрд░ рдЕрдм рд╣рдо рдкреНрд░рд╛рдкреНрдд рдореИрдХ рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 $vMAC = (($VM | Get-NetworkAdapter | Select-Object -Property "MacAddress").MacAddress).Replace(':','') 


рдЗрд╕ рдорд╛рди рдХреЛ рд╣рдорд╛рд░реА JSON рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред

 $Configuration.Network.MAC=$VMAC ConvertTo-Json -InputObject $Configuration -Depth 100 | Out-File "C:\Configs\TargetNodes\Build\$Hostname.json" -Force 


рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдЧрд┐рдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ рдХрд┐ рдорд╢реАрди рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЕрдкрдиреА рдЕрдиреВрдареА рдореИрдХ рд╣реИред

рдорд╢реАрди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ (sysprep рдХреЗ рдмрд╛рдж), рдЙрдкрдХрд░рдг рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛ред

рдЪрд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдм рддрдХ рд╣рдорд╛рд░реЗ WinRM рдорд╢реАрди рдХреА рд╕реНрдерд╛рдкрдирд╛Connection.ps1 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдбреАрдПрдЪрд╕реАрдкреА рд╕реЗ рдорд╢реАрди рдХреЛ рдХреНрдпрд╛ рдЖрдИрдкреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:

 # $MAC = $vMAC while($isOnline -ne $true){ if((Get-DhcpServerv4Lease -ClientId $MAC -ScopeId $StagingDHCPScope -ComputerName $DHCPServer -ErrorAction Ignore).IPAddress.IPAddressToString){ $tempIP=(Get-DhcpServerv4Lease -ClientId $MAC -ScopeId $StagingDHCPScope -ComputerName $DHCPServer).IPAddress.IPAddressToString break } else{ if($isOnline -ne $true){ Write-Host "`r$i`t" -NoNewline $i++ } } } 


рдФрд░ рдЕрдм рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрдм рдорд╢реАрди WinRM рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА:

 $LocalAdmin = Get-StoredCredential -Type Generic -Target LocalAdmin $i=0 $isOnline=$false while($isOnline -ne $true){ if(Invoke-Command -ComputerName $tempIP -ScriptBlock{ Get-ItemProperty -Path "Registry::\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing" } -Credential $LocalAdmin -ErrorAction SilentlyContinue){ $isOnline=$true break } else{ if($isOnline -ne $true){ Write-Host "`r$i" -NoNewline $i++ Start-Sleep -Seconds 1 } } } 


рдорд╢реАрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рд╡рд╛рдВрдЫрд┐рдд рд░рд╛рдЬреНрдп рд╡рд┐рдиреНрдпрд╛рд╕


рд╡рд╛рдВрдЫрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреЙрд╡рд░рд╢реЗрд▓ рднрд╛рдЧ - рдбреАрдПрд╕рд╕реА (рд╡рд╛рдВрдЫрд┐рдд рд░рд╛рдЬреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ DSC рдкреБрд▓ рд╕рд░реНрд╡рд░ рд╣реИ: dscpull.testdomain.euред
рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдбреАрдПрд╕рд╕реА рдкреБрд▓ рд╕рд░реНрд╡рд░ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред DSC рдкреБрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдкрд░ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦред

 Node $NodeName { WindowsFeature DSCServiceFeature { Ensure = "Present" Name = "DSC-Service" } xDscWebService PSDSCPullServer { Ensure = "Present" EndpointName = "PSDSCPullServer" Port = 8080 PhysicalPath = "$env:SystemDrive\inetpub\PSDSCPullServer" CertificateThumbPrint = $certificateThumbPrint ModulePath = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Modules" ConfigurationPath = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration" State = "Started" DependsOn = "[WindowsFeature]DSCServiceFeature" RegistrationKeyPath = "$env:PROGRAMFILES\WindowsPowerShell\DscService" AcceptSelfSignedCertificates = $true UseSecurityBestPractices = $true } File RegistrationKeyFile { Ensure = 'Present' Type = 'File' DestinationPath = "$env:ProgramFiles\WindowsPowerShell\DscService\RegistrationKeys.txt" Contents = $RegistrationKey } } 


рдпрд╣ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ: https://dscpull.testdomain.eu:8080

рдЗрд╕рдХрд╛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ: https://dscpull.testdomain.eu:8080/PSDSCPullserver.svc

рд╕рднреА рдкреБрд▓ рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ PowerShell 5.1 рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдпрджрд┐ PowerShell 5.1 рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ:

 $PSVersionTable.PSVersion.Major тАУlt 5 


PowerShell 5.1 рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 Write-Host "Download PowerShell 5.1" Invoke-Command -ComputerName $Node -ScriptBlock { [System.Net.ServicePointManager]::SecurityProtocol=[System.Net.SecurityProtocolType]::Tls12;Invoke-WebRequest -Uri "https://dscpull.testdomain.eu:8080/Files/Updates/WMF.msu" -OutFile C:\TEMP\WMF.MSU } Write-Host "Extract PowerShell 5.1" Invoke-Command -ComputerName $Node -ScriptBlock {Start-Process -FilePath 'wusa.exe' -ArgumentList "C:\temp\WMF.msu /extract:C:\temp\" -Wait -PassThru } Write-Host "Apply PowerShell 5.1" Invoke-Command -ComputerName $Node -ScriptBlock {Start-Process -FilePath 'dism.exe' -ArgumentList "/online /add-package /PackagePath:C:\temp\WindowsBlue-KB3191564-x64.cab /Quiet" -Wait -PassThru } Write-Host "PowerShell 5.1 has been installed" 


рд╣рдорд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ PKI рд╕рд░реНрд╡рд░ рднреА рддреИрдирд╛рдд рд╣реИред рдпрд╣ DSC mof рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рд╣реИ (Mof рдлрд╛рдЗрд▓реЗрдВ "рднрд╛рд╖рд╛" рдЬрд┐рд╕рдореЗрдВ рдкреБрд▓ рд╕рд░реНрд╡рд░ рдФрд░ рдЙрд╕рдХреЗ рдЧреНрд░рд╛рд╣рдХ рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ)ред рдЬрдм рдХреЛрдИ рдЧреНрд░рд╛рд╣рдХ рдкреБрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдердВрдмрдкреНрд░рд┐рдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдкреБрд▓ рд╕рд░реНрд╡рд░ рдЗрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд╕рд╡рд░реНрдб рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред рдиреАрдЪреЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реА рдирдИ рдорд╢реАрди рдореЗрдВ рд░реВрдЯ CA рдЖрдпрд╛рдд рдХрд░реЗрдВ:

  Invoke-Command -ComputerName $server -ScriptBlock{ $PKI="-----BEGIN CERTIFICATE----- MIIF2TCCA8GgAwIBAgIQSPIjcff9rotNdxbg3+ygqDANBgkqhkiG9w0BAQUFADAe **************************************************************** znafMvVx0B4tGEz2PFss/FviGdC3RohBHG0rF5jO50J4nS/3cGGm+HGdn1w/tZd0 a0FWpn9VCOSmXM2It+tSW1f4nZVt6T2kr1ZlTxkDhT7HMSGsrX/XJswzCkDGe3dE qrVVjNUkhVTaeeBWdujB5J6mcx7YkNsAUhODiS9Cf7FnYnxLFA72M0pijI48P5F0 ShM9HWAAUIrLkv13ug== -----END CERTIFICATE-----" $PKI | Out-File RootCA.cer Import-Certificate RootCA.cer -CertStoreLocation Cert:\LocalMachine\Root | select Thumbprint | Out-Null } -Credential $LocalAdmin | Out-Null 


рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ RSA рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдЕрдм рд╣рдо Pull Server рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 $DscHostFQDN = [System.Net.Dns]::GetHostEntry([string]$env:computername).HostName $DscPullServerURL = "https://$($DscHostFQDN):8080/PSDSCPullserver.svc" $DscWebConfigChildPath = '\inetpub\psdscpullserver\web.config' $DscWebConfigPath = Join-Path -Path $env:SystemDrive -ChildPath $DscWebConfigChildPath $DscWebConfigXML = [xml](Get-Content $DscWebConfigPath) $DscRegKeyName = 'RegistrationKeys.txt' $DscRegKeyXMLNode = "//appSettings/add[@key = 'RegistrationKeyPath']" $DscRegKeyParentPath = ($DscWebConfigXML.SelectNodes($DscRegKeyXMLNode)).value $DscRegKeyPath = Join-Path -Path $DscRegKeyParentPath -ChildPath $DscRegKeyName $DscRegKey = Get-Content $DscRegKeyPath [DSCLocalConfigurationManager()] configuration RegisterOnPull { Node $Node { Settings { ConfigurationModeFrequencyMins = 1440 CertificateID = $Thumbprint RefreshMode ='Pull' RefreshFrequencyMins = 1440 RebootNodeIfNeeded = $true ConfigurationMode ='ApplyAndAutoCorrect' AllowModuleOverwrite = $true DebugMode = 'None' StatusRetentionTimeInDays = 1 } ConfigurationRepositoryWeb $([string]$env:computername) { ServerURL = $DscPullServerURL RegistrationKey = $DscRegKey CertificateID = $Thumbprint ConfigurationNames = @("$hostx") } } } RegisterOnPull -OutputPath $MetaConfigsStorage Set-DscLocalConfigurationManager -ComputerName $Node -Path $MetaConfigsStorage -Verbose -Force -Credential $LocalAdmin 


рд╣рдорд╛рд░реА рдорд╢реАрди рдХреЛ рдкрд╣рд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднреЗрдЬреЗрдВ

 Configuration Rename { param ( [Parameter()] [System.String[]] $Node, $hostname ) Import-DscResource -ModuleName xComputerManagement Import-DscResource тАУModuleName PSDesiredStateConfiguration Node $Node { xComputer JoinDomain { Name = $hostname } } } Rename -Node $Node -OutputPath $DscConfigPath -hostname $hostname New-DscChecksum $DscConfigPath -Force Invoke-Command -ComputerName $Node -ScriptBlock{Update-DscConfiguration -Verbose -Wait } -Credential $LocalAdmin -Verbose 


рд╕рд░реНрд╡рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╛рдо рдмрджрд▓рдХрд░ рд░реАрдмреВрдЯ рдХрд░реЗрдЧрд╛ред рдЕрдм рд╣рдо Join рдбреЛрдореЗрди рдкрд░ рдЕрдорд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 Configuration JoinAD { param ( [Parameter()] [System.String[]] $Node, [Parameter(Mandatory = $true)] [ValidateNotNullorEmpty()] [System.Management.Automation.PSCredential] $DomainAdmin, $hostname, $domain ) Import-DscResource -ModuleName xComputerManagement Import-DscResource тАУModuleName PSDesiredStateConfiguration Node $Node { xComputer JoinDomain { Name = $hostname DomainName = $domain Credential = $DomainAdmin JoinOU = "OU=Servers,OU=Staging,DC=testdomain,DC=eu" } GroupSet LocalAdmins { GroupName = @( 'Administrators') Ensure = 'Present' MembersToInclude = @( 'testdomain-eu\dscstaging' ) } } } $cd = @{ AllNodes = @( @{ NodeName = $Node PSDscAllowPlainTextPassword = $false PSDscAllowDomainUser=$true Certificatefile = $CertFile Thumbprint = $Certificate.ToString() } ) } JoinAD -Node $Node -OutputPath $DscConfigPath -DomainAdmin $DomainAdmin -hostname $hostname -ConfigurationData $cd -domain $domain New-DscChecksum $DscConfigPath -Force Invoke-Command -ComputerName $Node -ScriptBlock{Update-DscConfiguration -Verbose -Wait } -Credential $LocalAdmin -Verbose 


рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ mof рдлрд╝рд╛рдЗрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 instance of MSFT_Credential as $MSFT_Credential1ref { Password = "-----BEGIN CMS-----\nMIIBsgYJKoZIhvcNAQcDoIIBozCCAZ8CAQAxggFKMIIBRgIBADAuMBoxGDAWBgNVBAMMD1dJTi1H\nNFFKTFFQME4xNQIQOQN77pxew75HU6l7GPn99TANBgkqhkiG9w0BAQcwAASCAQAlhFf7Zs2gJbJEnc1DEK2yWbKcO+BEyD2cr6vKHdn\nQ9TrjvbysEOvYjT15o6MccwkMEwGCSqGSIb3DQEHATAdBglghkgBZQMEASoEEEdKJT+GX4IkPezR\nwYncyQiAIAFKxwJocH4ufRsq9L2Ipkp+VQCx2ljlwif6ac4X/PqG\n-----END CMS-----"; UserName = "testdomain.eu\\service_DomainJoin_001"; }; instance of MSFT_xComputer as $MSFT_xComputer1ref { ResourceID = "[xComputer]JoinDomain"; Credential = $MSFT_Credential1ref; DomainName = "testdomain.eu"; SourceInfo = "C:\\Program Files\\WindowsPowerShell\\Scripts\\JoinAD.ps1::34::9::xComputer"; Name = "dsctest51"; JoinOU = "OU=Servers,OU=Staging,DC=testdomain,DC=eu"; ModuleName = "xComputerManagement"; ModuleVersion = "4.1.0.0"; ConfigurationName = "JoinAD"; }; nMIIBsgYJKoZIhvcNAQcDoIIBozCCAZ8CAQAxggFKMIIBRgIBADAuMBoxGDAWBgNVBAMMD1dJTi1H \ nNFFKTFFQME4xNQIQOQN77pxew75HU6l7GPn99TANBgkqhkiG9w0BAQcwAASCAQAlhFf7Zs2gJbJEnc1DEK2yWbKcO + BEyD2cr6vKHdn \ nQ9TrjvbysEOvYjT15o6MccwkMEwGCSqGSIb3DQEHATAdBglghkgBZQMEASoEEEdKJT + GX4IkPezR \ nwYncyQiAIAFKxwJocH4ufRsq9L2Ipkp + VQCx2ljlwif6ac4X / PqG \ N ----- END рд╕реАрдПрдордПрд╕ -----"; instance of MSFT_Credential as $MSFT_Credential1ref { Password = "-----BEGIN CMS-----\nMIIBsgYJKoZIhvcNAQcDoIIBozCCAZ8CAQAxggFKMIIBRgIBADAuMBoxGDAWBgNVBAMMD1dJTi1H\nNFFKTFFQME4xNQIQOQN77pxew75HU6l7GPn99TANBgkqhkiG9w0BAQcwAASCAQAlhFf7Zs2gJbJEnc1DEK2yWbKcO+BEyD2cr6vKHdn\nQ9TrjvbysEOvYjT15o6MccwkMEwGCSqGSIb3DQEHATAdBglghkgBZQMEASoEEEdKJT+GX4IkPezR\nwYncyQiAIAFKxwJocH4ufRsq9L2Ipkp+VQCx2ljlwif6ac4X/PqG\n-----END CMS-----"; UserName = "testdomain.eu\\service_DomainJoin_001"; }; instance of MSFT_xComputer as $MSFT_xComputer1ref { ResourceID = "[xComputer]JoinDomain"; Credential = $MSFT_Credential1ref; DomainName = "testdomain.eu"; SourceInfo = "C:\\Program Files\\WindowsPowerShell\\Scripts\\JoinAD.ps1::34::9::xComputer"; Name = "dsctest51"; JoinOU = "OU=Servers,OU=Staging,DC=testdomain,DC=eu"; ModuleName = "xComputerManagement"; ModuleVersion = "4.1.0.0"; ConfigurationName = "JoinAD"; }; 


DSC рдиреЗ рдбреЛрдореЗрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛: рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде testdomain.eu \\ service_DomainJoin_001ред DSC рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдкрдиреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбреЛрдореЗрди рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЙрдбреНрдпреВрд▓ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЧрдарди рдЗрдХрд╛рдИ рдореЗрдВ рдбреЛрдореЗрди рдЬреЙрдЗрди рдХрд░рддрд╛ рд╣реИред

 GroupSet LocalAdmins { GroupName = @( 'Administrators') Ensure = 'Present' MembersToInclude = @( testdomain-eu\dscstaging' ) } 


рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП dscstaging рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдбреЛрдореЗрди рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдорд╢реАрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рд╣рдо рдЕрдкрдиреЗ PKI рд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдСрдЯреЛ рдирд╛рдорд╛рдВрдХрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИ) рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ PKI рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

 $vmcert=Invoke-Command -ComputerName $server -ScriptBlock{ return Get-ChildItem -Path cert:\LocalMachine\My | where {$_.EnhancedKeyUsageList.FriendlyName -eq "Document Encryption"-and $_.Issuer -eq "CN=TestDomain Issuing CA, DC=testdomain, DC=eu"} } -ErrorAction Ignore 


рдЕрдм рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдердВрдмрдкреНрд░рд┐рдВрдЯ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреБрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░реЗрдВред

рдпрд╣ рд╡рд╣ рд╣реИ, рдЬреЛ рдбреЛрдореЗрди рд╕реЗ рдЬреБрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред

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


JSON рдлрд╝рд╛рдЗрд▓ MS SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ, рд╣рдо SQL рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DSC рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 Configuration $Node{ WindowsFeature "NetFramework35"{ Name = "NET-Framework-Core" Ensure = "Present" Source = "\\$DscHostFQDN\Files\Updates" } WindowsFeature "NetFramework45"{ Name = "NET-Framework-45-Core" Ensure= "Present" } SqlSetup "MSSQL2012NamedInstance"{ InstanceName = $MSSQL.InstanceName Features = $MSSQL.Features ProductKey = $ProductKey SQLCollation = $MSSQL.Collation SQLSysAdminAccounts = @('testdomain-EU\SQLAdmins',' testdomain-EU\Backup') InstallSharedDir = "C:\Program Files\Microsoft SQL Server" InstallSharedWOWDir = "C:\Program Files (x86)\Microsoft SQL Server" InstallSQLDataDir = $MSSQL.DataRoot SQLUserDBDir = $MSSQL.UserDBDir SQLUserDBLogDir = $MSSQL.UserLogDir SQLTempDBDir = $MSSQL.TempDBDir SQLTempDBLogDir = $MSSQL.TempDBLogDir SQLBackupDir = $MSSQL.BackupDir SourcePath = $SQLSource SAPwd = $SA SecurityMode = 'SQL' UpdateSource = ".\Updates" Action = "Install" ForceReboot = $True SQLSvcAccount = $SqlServiceCredential AgtSvcAccount = $SqlServiceCredential ISSvcAccount = $SqlServiceCredential BrowserSvcStartupType = "Automatic" DependsOn = '[WindowsFeature]NetFramework35', '[WindowsFeature]NetFramework45' } 

рдЬрд╣рд╛рдБ $ MSSQL рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 $MSSQL=$Configuration.Applications | where {$_.Application -eq "Microsoft SQL Server 2012"} 


$ MSSQL.InstanceName - рдпрд╣ рд╕рдм рд╣рдорд╛рд░реА Json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЕрдкрдбреЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред

рдЧрд╛рдбрд╝реА рддреИрдпрд╛рд░ рд╣реИред

рдЕрднреА рд╕реЗрд╡рд╛ рдХрд░реЗрдВ


рд╕реЗрд╡рд╛-рдЕрдм рдореЗрдВ рдХрдИ рдПрдкреАрдЖрдИ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред рд╣рдо рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдерд┐рддрд┐ рд╡рд╛рд▓реА рдорд╢реАрдиреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреЙрд░реНрдо рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
inst.service-now.com/cmdb_ci_server_list.do?sysparm_query=install_status=16 ^ u_subtype = ^ ORDERBYname
PowerShell рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 $url="https://instance.service-now.com/api/now/table/cmdb_ci_server?sysparm_query=install_status=16^u_subtype=^ORDERBYname" $uri= new-object System.Uri("https://instance.service-now.com/") #       $credentials = (Get-StoredCredential -Type Generic -Target DSC).GetNetworkCredential() $credentials = new-object System.Net.NetworkCredential $credentials.UserName, $credentials.SecurePassword Add-Type -AssemblyName System.Net.Http $handler = New-Object System.Net.Http.HttpClientHandler $handler.CookieContainer = New-Object System.Net.CookieContainer $handler.UseCookies=$true $handler.Credentials=$credentials $HttpClient = New-Object System.Net.Http.HttpClient($handler) $HttpClient.BaseAddress= $uri $Header = New-Object System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json") $HttpClient.DefaultRequestHeaders.Accept.Clear() $HttpClient.DefaultRequestHeaders.Accept.Add($Header); $response=$HttpClient.GetAsync($url) $respStream=$response.Result.Content.ReadAsStringAsync() $Servers = $respStream.Result | ConvertFrom-Json #   Configuration Items  $ServersCI=$Servers.result 

рдкрд╣рд▓рд╛ рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрд╕реНрдЯрдирд╛рдо рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдорд╢реАрди рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рд╕реЗрд╡рд╛ рдХреА рдорд╢реАрди рдореЗрдВ рд╕реНрдЯреЗрдЯрд╕-рдирд╛рдЙ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП UpdateCI.ps1 рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
 param( $CI, [ValidateSet("Allocated","In use","Pending install")] $NewStatus='In use' ) $url="https://instance.service-now.com/api/now/table/cmdb_ci_server?sysparm_query=name=$CI" $uri= new-object System.Uri("https://instance.service-now.com/") $credentials = (Get-StoredCredential -Type Generic -Target DSC).GetNetworkCredential() $credentials = new-object System.Net.NetworkCredential $credentials.UserName, $credentials.SecurePassword Add-Type -AssemblyName System.Net.Http $handler = New-Object System.Net.Http.HttpClientHandler $handler.CookieContainer = New-Object System.Net.CookieContainer $handler.UseCookies=$true $handler.Credentials=$credentials $HttpClient = New-Object System.Net.Http.HttpClient($handler) $HttpClient.BaseAddress= $uri $Header = New-Object System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json") $HttpClient.DefaultRequestHeaders.Accept.Clear() $HttpClient.DefaultRequestHeaders.Accept.Add($Header); $response=$HttpClient.GetAsync($url) $respStream=$response.Result.Content.ReadAsStringAsync() $Servers = $respStream.Result | ConvertFrom-Json $ServerCI=$Servers.result[0] $update=@{} if($NewStatus -eq "In use"){ $update.install_status=1 } if($NewStatus -eq "Pending install"){ $update.install_status=4 } $stringcontent = New-Object System.Net.Http.StringContent((ConvertTo-Json -InputObject $update -Depth 100),[System.Text.Encoding]::UTF8, "application/json"); $result=$HttpClient.PutAsync("https://instance.service-now.com/api/now/table/cmdb_ci_server/$($ServerCI.sys_id)", $stringcontent) 

рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, REST API GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд┐рдХреЙрд░реНрдб PUT / POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдордиреЗ Azure Portal рдЬреИрд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯреВрд▓ рдмрдирд╛рдпрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдпрдерд╛рд╕рдВрднрд╡ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдСрди-рдкреНрд░рд┐рдорд╛рдЗрд╕реЗрд╕ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
PS 12.24.2018ред рдХреНрдпрд╛ рд╕рдм рдХреБрдЫ рдкреБрд░рд╛рдирд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдпрд╣ Azure DevOps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд░реЗрдВ Azure DevOps рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рд╛рдеред

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


All Articles