рдЖрджрд░реНрд╢ Minecraft рд╕рд░реНрд╡рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдЖрджрд░реНрд╢ Minecraft рд╕рд░реНрд╡рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ

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

рд╣рдореЗрдВ рдЬрд┐рди рдЖрджреЗрд╢реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рд╡реИрдХрд▓реНрдкрд┐рдХ рд▓реЙрдЧрд┐рдВрдЧ

рдПрдХ рджрд┐рди, рдХреБрдЫ рдФрд░ рдореЙрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рд░реНрд╡рд░, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдпреБрджреНрдз рдХреА рдШреЛрд╖рдгрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд░реИрд╢ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рд╕рд░реНрд╡рд░ рдиреЗ рдирд╡реАрдирддрдо.рд▓реЙрдЧ рдпрд╛ рдбрд┐рдмрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд▓рд┐рдЦреАрдВ, рдФрд░ рдХрдВрд╕реЛрд▓, рдЬрд┐рд╕реЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рд▓рд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП рдереА рдФрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

.handler.ps1 | Tee-Object .StandardOutput.txt -Append

рдЗрд╕ рддрд░рд╣, рдкреЙрд╡рд░рд╢реЗрд▓ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдЙрдард╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдЧрд╛ред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВ рдкреНрд░рд╛рд░рдВрдн-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ System.ComponentModel.Component рд▓реМрдЯрд╛рдПрдЧрд╛, рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ, рдФрд░ -RedirectStandardOutput рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рддрд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ

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

рдЪреВрдВрдХрд┐ рдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗрд╡рд▓ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ "рдЬрд╕реНрдЯ рд▓рд╛рдЗрдХ рджрд┐рд╕" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреА рд╣реЛрдЧреАред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ Minecraft рджреНрд╡рд╛рд░рд╛ рд╣реА рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдПрдЧреАред рдЖрдЗрдП рддрд░реНрдХреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред

рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд░рдо рдЖрд▓рд╕реНрдп рдореЗрдВ рд▓рд┐рдкреНрдд рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рддреБрд░рдВрдд рд▓реЙрдиреНрдЪ рддрд░реНрдХ рдПрдХрддреНрд░ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░реЗрдВ рдмрдирд╛рдирд╛.

$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1

рд╕реЙрд░реНрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╣рдореЗрд╢рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд▓реЗрдВрдЧреЗ, рдЪрд╛рд╣реЗ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рднреА рд╡рд╣рд╛рдВ рд░рдЦреЗрдВред рдкрд░рдо рдЖрд▓рд╕реНрдп.

рдЕрдм рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдореЗрдореЛрд░реА рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рд▓реЗрдВ рдФрд░ рдЗрд╕рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд▓рд┐рдЦреЗрдВред

$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"

рд╕реНрд╡рдд: рдкреБрдирд░рд╛рд░рдВрдн рд╕рд╣реА рдХрд░реЗрдВ

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдЧрд╛ред

function Get-MinecraftExitCode {
   
    do {
        
        if ($global:Process.ExitCode -ne 0) {
            Write-Log
            Restart-Minecraft
        }
        else {
            Write-Log
        }
 
    } until ($global:Process.ExitCode -eq 0)
    
}

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдм рддрдХ рд▓реВрдк рдореЗрдВ рд░рд╣реЗрдЧреА рдЬрдм рддрдХ рд╕рд░реНрд╡рд░ /рд╕реНрдЯреЙрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред

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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдЯрд╛рд░реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

$global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru

рдФрд░ рдлрд┐рд░ рд╣рдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

$global:Process.StartTime
$global:Process.ExitCode	
$global:Process.ExitTime

рдпрд╣ рд╕рдм рдРрдб-рдХрдВрдЯреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЦрдВрдЧрд╛рд▓рдиреЗ рдкрд░, рд╣рдореЗрдВ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдЪрд▓рд┐рдП рдЗрд╕реЗ рд╣реИрдВрдбрд▓рд░.ps1 рдХрд╣рддреЗ рд╣реИрдВред

Add-Content -Value "Start time:" -Path $Logfile 
$global:Process.StartTime
 
Add-Content -Value "Exit code:" -Path $Logfile 
$global:Process.ExitCode | Add-Content $Logfile
    
Add-Content -Value "Exit time:" -Path $Logfile 
$global:Process.ExitTime | Add-Content $Logfile

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

рд╕рд╣реА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк

рд▓реЗрдЦрдХ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрде рд╕реЗ Minecraft рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓реЙрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реИред рдпрд╣ рдбреЗрд╕реНрдХрдЯреЙрдк рдпрд╛ WinRm рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Server.jar eula.txt рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password  -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1 -ErrorAction SilentlyContinue

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

рд╣рдордиреЗ рдСрдЯреЛ-рд▓реЙрдЧрд┐рди рдХреЛ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛ред рдЕрдм рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest

рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдирд╛

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

рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рдЕрд▓рдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрдЯрд╛рд░реНрдЯ-рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯ

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

рдкреИрд░рд╛рдореАрдЯрд░ рдмреНрд▓реЙрдХ рдореЗрдВ, рд╡рд╣ рдкреВрдЫрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ Minecraft рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИ рдФрд░ рд▓реЙрдЧ рдХрд╣рд╛рдБ рд░рдЦрдирд╛ рд╣реИред

Set-Location (Split-Path $MyInvocation.MyCommand.Path)
function Start-Minecraft {
    [CmdletBinding()]
    param (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]
        $LogFile,
 
        [Parameter(Mandatory)]  
        [ValidateSet('Vanilla', 'Forge')]
        [ValidateNotNullOrEmpty()]
        [string]
        $Type,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $MinecraftPath
 
    )
    powershell.exe -file .handler.ps1 -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append
}
Export-ModuleMember -Function Start-Minecraft

рдФрд░ рдЖрдкрдХреЛ Minecraft рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"

рдЕрдм рдЖрдЗрдП рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ Handler.ps1 рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ

рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдмреНрд▓реЙрдХ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдУрд░реЗрдХрд▓ рдЬрд╛рд╡рд╛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдХ рдЕрд▓рдЧ рд╡рд┐рддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

param (
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$type,
 
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$MinecraftPath,
 
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$StandardOutput
)
 
Set-Location $MinecraftPath
 
function Restart-Minecraft {
 
    Write-host "=============== Starting godlike game server ============"
 
    $forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -first 1
 
    $ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
    $xmx = "-Xms" + $ram + "G"
    $global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
    
}
 
function Write-Log {
    Write-host "Start time:" $global:Process.StartTime
 
    Write-host "Exit code:" $global:Process.ExitCode
    
    Write-host "Exit time:" $global:Process.ExitTime
 
    Write-host "=============== Stopped godlike game server ============="
}
 
function Get-MinecraftExitCode {
   
    do {
        
        if ($global:Process.ExitCode -ne 0) {
            Restart-Minecraft
            Write-Log
        }
        else {
            Write-Log
        }
 
    } until ($global:Process.ExitCode -eq 0)
    
}
 
Get-MinecraftExitCode

рд░рдЬрд┐рд╕реНрдЯрд░-Minecraft

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯ-рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реАрдВ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдирд╛рдо рд▓реЗ рд▓реЗрддрд╛ рд╣реИред

function Register-Minecraft {
    [CmdletBinding()]
    param (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]
        $LogFile,
 
        [Parameter(Mandatory)]  
        [ValidateSet('Vanilla', 'Forge')]
        [ValidateNotNullOrEmpty()]
        [string]$Type,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$MinecraftPath,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$User,
 
        [Parameter(Mandatory)]
        [string]$TaskName = $env:USERNAME
    )
 
    $Trigger = New-ScheduledTaskTrigger -AtLogOn
    $arguments = "Start-Minecraft -Type $Type -LogFile $LogFile -MinecraftPath $MinecraftPath"
    $PS = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-noexit -command $arguments"
    Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $PS -RunLevel Highest
    
}
 
Export-ModuleMember -Function Register-Minecraft

рд░рдЬрд┐рд╕реНрдЯрд░-рдСрдЯреЛрд▓реЙрдЧрди

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

function Set-Autologon {
 
    param (
        [Parameter(
        HelpMessage="Username for autologon")]
        $Username = $env:USERNAME,
 
        [Parameter(Mandatory=$true,
        HelpMessage="User password")]
        [ValidateNotNullOrEmpty()]
        $Password
    )
 
    $i = Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"
 
    if ($null -eq $i) {
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password 
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
        Write-Verbose "Set-Autologon will enable user auto logon."
 
    }
    else {
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
    }
 
    
    Write-Verbose "Autologon was set successfully."
 
}

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

Set-Autologon -Password "PlaintextPassword"

рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд▓реЗрдЦрдХ рд╕реНрд╡рдпрдВ рдЗрди рд╕рдмрдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ Minecraft рд╕рд░реНрд╡рд░ рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВред рдЖрдЗрдП рдмрд┐рд▓реНрдХреБрд▓ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред

1. рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ

$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword

2. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ

рдЖрдк рдЗрд╕ рддрд░рд╣ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"

рдпрд╛ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest

3. рдСрдЯреЛ-рд▓реЙрдЧрд┐рди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдорд╢реАрди рдХреЛ рд░реАрдмреВрдЯ рдХрд░реЗрдВ

Set-Autologon -Username "MinecraftServer" -Password "Qw3"

рд╕рдорд╛рдкрди

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

рдЖрджрд░реНрд╢ Minecraft рд╕рд░реНрд╡рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ