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

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

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

рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЖрдЬреНрдЮрд╛

рдкрд░реНрдпрд╛рдпреА рд▓реЙрдЧрд┐рдВрдЧ

рдПрдХреЗ рджрд┐рд╡рд╢реА, рдЖрдгрдЦреА рдХрд╛рд╣реА рдореЙрдбреНрд╕ рдЗрдиреНрд╕реНрдЯреЙрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдорд▓рд╛ рдЖрдврд│рд▓реЗ рдХреА рд╕рд░реНрд╡реНрд╣рд░ рдпреБрджреНрдз рдШреЛрд╖рд┐рдд рди рдХрд░рддрд╛ рдХреНрд░реЕрд╢ рд╣реЛрдд рдЖрд╣реЗ. рд╕рд░реНрд╡реНрд╣рд░ latest.log рдХрд┐рдВрд╡рд╛ debug рд╡рд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рддреНрд░реБрдЯреА рд▓рд┐рд╣рд┐рдд рдирд╡реНрд╣рддрд╛ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓, рдЬреЛ рддреНрд░реБрдЯреА рд▓рд┐рд╣реВрди рдерд╛рдВрдмрд╛рдпрд▓рд╛ рд╣рд╡рд╛ рд╣реЛрддрд╛, рддреЛ рдмрдВрдж рдЭрд╛рд▓рд╛ рд╣реЛрддрд╛.

рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд▓рд┐рд╣рд╛рдпрдЪреЗ рдирд╕реЗрд▓ рддрд░ рддреЗ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдЖрдордЪреНрдпрд╛рдХрдбреЗ cmdlet рд╕рд╣ PowerShell рдЖрд╣реЗ. рдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдШреЗрддреЗ рдЖрдгрд┐ рддреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдлрд╛рдИрд▓ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ.

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

рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдЯрдБрдбрд░реНрдбрдЖрдЙрдЯрдкреБрдЯ рдШреЗрдИрд▓ рдЖрдгрд┐ рддреЗ рдПрдХрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рд▓рд┐рд╣реАрд▓. рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдирдХрд╛ рдкреНрд░рд╛рд░рдВрдн-рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдХрд╛рд░рдг рддреЗ StandardOutput рдРрд╡рдЬреА System.ComponentModel.Component рдкрд░рдд рдХрд░реЗрд▓ рдЖрдгрд┐ -RedirectStandardOutput рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдЗрдирдкреБрдЯ рдХрд░рдгреЗ рдЕрд╢рдХреНрдп рдХрд░реЗрд▓, рдЬреЗ рдЖрдкрдг рдЯрд╛рд│реВ рдЗрдЪреНрдЫрд┐рддреЛ.

рд╡рд┐рддрд░реНрдХ рд▓рд╛рдБрдЪ рдХрд░рд╛

рддреЗрдЪ рджреЛрди рдореЙрдбреНрд╕ рдЗрдиреНрд╕реНрдЯреЙрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдХреА рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗрд╣реА рд░реЕрдо рдХрдореА рдкрдбрдд рдЖрд╣реЗ. рдпрд╛рд╕рд╛рдареА рд▓рд╛рдБрдЪ рдЖрд░реНрдЧреБрдореЗрдВрдЯреНрд╕ рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХрдЬрдг рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ start.bat рдлрд╛рдЗрд▓рдордзреНрдпреЗ рддреЗ рджрд░рд╡реЗрд│реА рдмрджрд▓рдгреНрдпрд╛рдРрд╡рдЬреА, рдлрдХреНрдд рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд░рд╛.

рдЬреЗрд╡реНрд╣рд╛ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдереЗрдЯ рдХреЙрд▓ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ рдлрдХреНрдд рд╕реНрдЯрдБрдбрд░реНрдбрдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рдЪрддреЛ, рдореНрд╣рдгреВрди рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреБрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ 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 рдлрд╛рдпрд▓реА рдкрд╛рд╣рд┐рд▓реНрдпрд╛ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдиреА рд╕рд░реНрд╡реНрд╣рд░ рдмрдВрдж рд╣реЛрдгреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдирд╛рд╣реА. рд╣реЗ рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ; рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдореЙрдб рдлрд╛рдЗрд▓ рдмрджрд▓рд╛рдпрдЪреА рдЕрд╕реЗрд▓ рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрддрд░реА рд╣рдЯрд╡рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рдХрд╛рдп рдХрд░рд╛рд╡реЗ?
рдЖрддрд╛ рдЖрдкрдг рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реВрдпрд╛. рд▓реЗрдЦрдХрд╛рд▓рд╛ рдпрд╛рдкреВрд░реНрд╡реА рдЕрд╢рд╛ рд╡рд┐рдЪрд┐рддреНрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЖрдврд│рд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЬреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░ рдХрд╛ рдмрдВрдж рдХреЗрд▓рд╛ рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рддрд╛рдд. рдЖрдкрдг рдПрдХреНрдЭрд┐рдЯрдХреЛрдб рд╡рд╛рдкрд░реВ. рдЬрд╛рд╡рд╛ реж рд╣рд╛ рдпрд╢рд╕реНрд╡реА рдХреЛрдб рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рддреЛ, рдореНрд╣рдгреВрди рдЖрдкрдг рддрд┐рдереВрди рдХрд╛рдо рдХрд░реВ.

рдкреНрд░рдердо, рдПрдХ рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░реВрдпрд╛ рдЬреЗ рд╕рд░реНрд╡реНрд╣рд░рдиреЗ рддреНрдпрд╛рдЪреЗ рдХрд╛рдо рдкреВрд░реНрдг рди рдХреЗрд▓реНрдпрд╛рд╕ рддреЗ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реЗрд▓.

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

/stop рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡реНрд╣рд░ рддреНрдпрд╛рдЪреНрдпрд╛ рдХрдиреНрд╕реЛрд▓рд╡рд░реВрди рд╕рд╛рдорд╛рдиреНрдпрдкрдгреЗ рдмрдВрдж рд╣реЛрдИрдкрд░реНрдпрдВрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реВрдкрдордзреНрдпреЗ рд░рд╛рд╣реАрд▓.

рдЬрд░ рдЖрдкрдг рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛, рддрд░ рд▓рд╛рдБрдЪ рддрд╛рд░реАрдЦ, рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рддрд╛рд░реАрдЦ рдЖрдгрд┐ рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг рджреЗрдЦреАрд▓ рдЧреЛрд│рд╛ рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓.

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг Start-Process рдЪрд╛ рдирд┐рдХрд╛рд▓ рдПрдХрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ. рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ, рддреЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

$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

рд╣реЗ рд╕рд░реНрд╡ Add-Content рд╡рд╛рдкрд░реВрди рдлрд╛рдИрд▓рдордзреНрдпреЗ рдЬреЛрдбрддрд╛ рдпреЗрддреЗ. рдереЛрдбреЗ рдмрджрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд│рддреЗ, рдЬреНрдпрд╛рд▓рд╛ рдЖрдкрдг handler.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

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

рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореВрд▓рддрдГ Start-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"

рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рд╡реЗ

рдЖрддрд╛ рдЖрдкрдг рдкрд╛рд╣реВрдпрд╛ рдХреА рд▓реЗрдЦрдХ рд╕реНрд╡рддрдГ рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рд╡рд╛рдкрд░рддрд╛рдд. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯ рд╕рд░реНрд╡реНрд╣рд░ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╕рд╛ рддреИрдирд╛рдд рдХрд░рд╛рдпрдЪрд╛. WindowsрдЖрдкрдг рдЕрдЧрджреА рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛.

рез. рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рд╛

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

реи. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдп рдиреЛрдВрджрдгреА рдХрд░рд╛.

рддреБрдореНрд╣реА рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдореЙрдбреНрдпреВрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдиреЛрдВрджрдгреА рдХрд░реВ рд╢рдХрддрд╛:

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

рей. рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд▓реЙрдЧрд┐рди рд╕рдХреНрд╖рдо рдХрд░рд╛ рдЖрдгрд┐ рдорд╢реАрди рд░реАрдмреВрдЯ рдХрд░рд╛.

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

рдкреВрд░реНрдг рдХрд░рдгреЗ

рд▓реЗрдЦрдХрд╛рдиреЗ рд╕реНрд╡рддрдГрд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рддреА рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдордЪреНрдпрд╛ рд╕реВрдЪрдирд╛ рдРрдХреВрди рддреНрдпрд╛рдВрдирд╛ рдЖрдирдВрдж рд╣реЛрдИрд▓. рд▓реЗрдЦрдХрд╛рд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╛ рдХреЛрдб рдХрдореАрдд рдХрдореА рдЙрдкрдпреБрдХреНрдд рд╡рд╛рдЯрд▓рд╛ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╛ рд▓реЗрдЦ рдордиреЛрд░рдВрдЬрдХ рд╡рд╛рдЯрд▓рд╛ рдЕрд╕реЗрд▓.

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

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

DDoS рд╕рдВрд░рдХреНрд╖рдг, VPS VDS рд╕рд░реНрд╡реНрд╣рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдЗрдЯрд╕рд╛рдареА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реЗрджреА рдХрд░рд╛ ЁЯФе рдбреАрдбреЙрд╕ рд╕рдВрд░рдХреНрд╖рдгрд╛рд╕рд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ, рд╡реНрд╣реАрдкреАрдПрд╕ (VPS) рд╡реНрд╣реАрдбреАрдПрд╕ (VDS) рд╕рд░реНрд╡реНрд╣рд░реНрд╕ рдЦрд░реЗрджреА рдХрд░рд╛ | ProHoster