рд▓реЗрдЦрдХрд╛рд▓рд╛ рд╣рд╛ рдЦреЗрд│ рдЦреВрдк рдЖрд╡рдбрддреЛ рдЖрдгрд┐ рддреЛ рд╕реНрд╡рддрдГ тАЬрдирд┐рд╡реНрд╡рд│ рдорд┐рддреНрд░рд╛рдВрд╕рд╛рдареАтАЭ рдПрдХрд╛ рдЫреЛрдЯреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рдкреНрд░рд╢рд╛рд╕рдХ рдЖрд╣реЗ. рд╣реМрд╢реА рд▓реЛрдХрд╛рдВрдордзреНрдпреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реБрдзрд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдпрд╛рдореБрд│реЗ рдЕрд╕реНрдерд┐рд░рддрд╛ рдпреЗрддреЗ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдореА, рдХреНрд░реЕрд╢ рд╣реЛрддреЗ. рдкреЙрд╡рд░рд╢реЗрд▓рдЪреНрдпрд╛ рд▓реЗрдЦрдХрд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рд░рд╕реНрддреНрдпрд╛рд╡рд░реАрд▓ рджреБрдХрд╛рдирд╛рдВрдЪреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдкреЗрдХреНрд╖рд╛ рдЪрд╛рдВрдЧрд▓реЗ рдорд╛рд╣рд┐рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ рддреНрдпрд╛рдиреЗ "Minecraft 2020 рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реЛрддреНрддрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рдордзреАрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╕рд╛рдареА рд╕рдорд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдзрд╛рд░ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░рддреЗ
рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЖрдЬреНрдЮрд╛
рдкрд░реНрдпрд╛рдпреА рд▓реЙрдЧрд┐рдВрдЧ
рдПрдХреЗ рджрд┐рд╡рд╢реА, рдЖрдгрдЦреА рдХрд╛рд╣реА рдореЛрдбреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдорд▓рд╛ рдЖрдврд│рд▓реЗ рдХреА рд╕рд░реНрд╡реНрд╣рд░, рд╡рд░рд╡рд░ рдкрд╛рд╣рддрд╛, рдпреБрджреНрдз рдШреЛрд╖рд┐рдд рдХреЗрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рдХреНрд░реЕрд╢ рд╣реЛрдд рдЖрд╣реЗ. рд╕рд░реНрд╡реНрд╣рд░рдиреЗ latest.log рдордзреНрдпреЗ рдХрд┐рдВрд╡рд╛ рдбреАрдмрдЧрдордзреНрдпреЗ рддреНрд░реБрдЯреА рд▓рд┐рд╣рд┐рд▓реНрдпрд╛ рдирд╛рд╣реАрдд рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓, рдЬреНрдпрд╛рдиреЗ рд╕рд┐рджреНрдзрд╛рдВрддрддрдГ рд╣реА рддреНрд░реБрдЯреА рд▓рд┐рд╣рд┐рд▓реА рд╣реЛрддреА рдЖрдгрд┐ рдерд╛рдВрдмрд▓реА рд╣реЛрддреА, рддреА рдмрдВрдж рдЭрд╛рд▓реА.
рдЬрд░ рддреНрдпрд╛рд▓рд╛ рд▓рд┐рд╣рд╛рдпрдЪреЗ рдирд╕реЗрд▓ рддрд░ рддреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдЖрдордЪреНрдпрд╛рдХрдбреЗ cmdlet рд╕рд╣ Powershell рдЖрд╣реЗ рдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдШреЗрддреЗ рдЖрдгрд┐ рддреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдлрд╛рдИрд▓ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓рд╡рд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдЯрдБрдбрд░реНрдбрдЖрдЙрдЯрдкреБрдЯ рдЙрдЪрд▓реЗрд▓ рдЖрдгрд┐ рдлрд╛рдЗрд▓рд╡рд░ рд▓рд┐рд╣реЗрд▓. рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдирдХрд╛ рдкреНрд░рд╛рд░рдВрдн-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХрд╛рд░рдг рддреЗ System.ComponentModel.Component рдкрд░рдд рдХрд░реЗрд▓ рдЖрдгрд┐ StandardOutput рдирд╛рд╣реА, рдЖрдгрд┐ -RedirectStandardOutput рдХрдВрд╕реЛрд▓рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреЗ рдЕрд╢рдХреНрдп рдХрд░реЗрд▓, рдЬреЗ рдЖрдкрдг рдЯрд╛рд│реВ рдЗрдЪреНрдЫрд┐рддреЛ.
рдпреБрдХреНрддрд┐рд╡рд╛рдж рд▓рд╛рдБрдЪ рдХрд░рд╛
рдореЛрдбреНрд╕рдЪреА рддреАрдЪ рдЬреЛрдбреА рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдХреА рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рдкреБрд░реЗрд╢реА RAM рджреЗрдЦреАрд▓ рдирд╛рд╣реА. рдЖрдгрд┐ рдпрд╛рд╕рд╛рдареА рд▓реЙрдиреНрдЪ рд╡рд┐рддрд░реНрдХ рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. 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 рдлрд╛рдЗрд▓реНрд╕ рдкрд╛рд╣рд┐рд▓реНрдпрд╛ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдиреА рд╕рд░реНрд╡реНрд╣рд░ рдХрд╛ рдмрдВрдж рдХреЗрд▓рд╛ рдпрд╛рдЪреЗ рдХрд╛рд░рдг рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдирд╛рд╣реА. рд╣реЗ рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдореЛрдб рдлрд╛рдЗрд▓ рдмрджрд▓рдгреНрдпрд╛рдЪреА рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрддрд░реА рд╣рдЯрд╡рд╛рдпрдЪреА рдЕрд╕реЗрд▓ рддрд░?
рдЖрддрд╛ рдпреЛрдЧреНрдп рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реВ. рд▓реЗрдЦрдХрд╛рд▓рд╛ рдкреВрд░реНрд╡реА рд╡рд┐рдЪрд┐рддреНрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдврд│рд▓реНрдпрд╛ рдЬреНрдпрд╛рдВрдиреА рд╕рд░реНрд╡реНрд╣рд░ рдХрд╛ рдмрдВрдж рдХреЗрд▓рд╛ рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛ рд╕рд░реНрд╡реНрд╣рд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗрд▓рд╛. рдЖрдореНрд╣реА рдПрдХреНрдЭрд┐рдЯрдХреЛрдб рд╡рд╛рдкрд░реВ. Java рдпрд╢рд╕реНрд╡реА рдореНрд╣рдгреВрди 0 рд╡рд╛рдкрд░рддреЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдпреЗрдереВрди рдирд╛рдЪреВ.
рдкреНрд░рдердо, рдПрдХ рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░реВ рдЬреЗ рд╕рд░реНрд╡реНрд╣рд░ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реЗрд▓.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
/stop рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдХрдиреНрд╕реЛрд▓рдордзреВрди рд╕рд╛рдорд╛рдиреНрдпрдкрдгреЗ рдмрдВрдж рд╣реЛрдИрдкрд░реНрдпрдВрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реВрдкрдордзреНрдпреЗ рд░рд╛рд╣реАрд▓.
рдЬрд░ рдЖрдкрдг рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛, рддрд░ рдкреНрд░рд╛рд░рдВрдн рддрд╛рд░реАрдЦ, рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рддрд╛рд░реАрдЦ рдЖрдгрд┐ рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг рджреЗрдЦреАрд▓ рдЧреЛрд│рд╛ рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓.
рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╕реНрдЯрд╛рд░реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд▓рд┐рд╣реВ. рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
$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
рд╣реЗ рд╕рд░реНрд╡ рдЕреЕрдб-рд╕рд╛рдордЧреНрд░реА рд╡рд╛рдкрд░реВрди рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдереЛрдбреЗрд╕реЗ рдХрдВрдШреА рдХреЗрд▓реНрдпрд╛рд╡рд░, рдЖрдореНрд╣рд╛рд▓рд╛ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд│рд╛рд▓реА, рдЖрдгрд┐ рдЖрдкрдг рддрд┐рд▓рд╛ 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 рд╡рд░ рдЬрд╛рдК рдпрд╛
рдЖрдордЪреНрдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓рд╛ рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рд╡рд░ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реНрд╡реАрдХрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдмреНрд▓реЙрдХ рджреЗрдЦреАрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛, рддреЗ Oracle Java рдЪрд╛рд▓рд╡рддреЗ, рдЬрд░ рддреБрдореНрд╣реА рд╡реЗрдЧрд│реЗ рд╡рд┐рддрд░рдг рд╡рд╛рдкрд░рдд рдЕрд╕рд╛рд▓ рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓рдЪрд╛ рдорд╛рд░реНрдЧ рдмрджрд▓рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓.
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
рд░рдЬрд┐рд╕реНрдЯрд░-рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯ
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рд╕реНрдЯрд╛рд░реНрдЯ-рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯ рд╕рд╛рд░рдЦреАрдЪ рдЖрд╣реЗ, рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп рддреА рдлрдХреНрдд рдирд╡реАрди рдХрд╛рд░реНрдпрд╛рдЪреА рдиреЛрдВрджрдгреА рдХрд░рддреЗ. рд╕рдорд╛рди рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╕реНрд╡реАрдХрд╛рд░рддреЛ. рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХреЗрд▓реНрдпрд╛рд╕, рд╡рд░реНрддрдорд╛рди рдПрдХ рдШреЗрддреЗ.
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"
рдкреВрд░реНрдг рдХрд░рдгреЗ
рд▓реЗрдЦрдХрд╛рдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рддрдГрд╕рд╛рдареА рдмрдирд╡рд▓реА рдЖрд╣реЗ, рдореНрд╣рдгреВрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдордЪреНрдпрд╛ рд╕реВрдЪрдирд╛ рдРрдХреВрди рддреНрдпрд╛рд▓рд╛ рдЖрдирдВрдж рд╣реЛрдИрд▓. рд▓реЗрдЦрдХрд╛рд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣рд╛ рд╕рд░реНрд╡ рдХреЛрдб рдЖрдкрд▓реНрдпрд╛рд╕рд╛рдареА рдХрдореАрддрдХрдореА рдЙрдкрдпреБрдХреНрдд рд╣реЛрддрд╛ рдЖрдгрд┐ рд▓реЗрдЦ рдордиреЛрд░рдВрдЬрдХ рд╣реЛрддрд╛.
рд╕реНрддреНрд░реЛрдд: www.habr.com