рд▓реЗрдЦрдХрд▓реЗ рдЦреЗрд▓рд▓рд╛рдИ рдзреЗрд░реИ рдорд╛рдпрд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рд░ рдЙрд╣рд╛рдБ рдЖрдлреИрдВ "рд╕рд╛рдереАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрдг рд░реВрдкрдорд╛" рд╕рд╛рдиреЛ рд╕рд░реНрднрд░рдХреЛ рдкреНрд░рд╢рд╛рд╕рдХ рд╣реБрдиреБрд╣реБрдиреНрдЫред рдПрдореЗрдЪреНрдпреЛрд░рд╣рд░реВ рдмреАрдЪрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛, рд╕рд░реНрднрд░рдорд╛ рд╕рдмреИ рдХреБрд░рд╛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдпрд╕рд▓реЗ рдЕрд╕реНрдерд┐рд░рддрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреНрд░реНрдпрд╛рд╕ рд╣реБрдиреНрдЫред рдкрд╛рд╡рд░рд╢реЗрд▓рдХрд╛ рд▓реЗрдЦрдХрд▓рд╛рдИ рдЙрдирдХреЛ рд╕рдбрдХрдорд╛ рдкрд╕рд▓рд╣рд░реВрдХреЛ рд╕реНрдерд╛рди рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдерд╛рд╣рд╛ рднрдПрдХреЛрд▓реЗ, рдЙрдирд▓реЗ "рдмрдирд╛рдЙрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗредMinecraft реирежреиреж рд╕реБрд░реБ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрддрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рдПрдЙрдЯреИ рд▓рд┐рдкрд┐рд▓реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯрдХреЛ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдпреЛ
рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рдЖрджреЗрд╢рд╣рд░реВ
рд╡реИрдХрд▓реНрдкрд┐рдХ рд▓рдЧрд┐рдЩ
рдПрдХ рджрд┐рди, рдХреЗрд╣рд┐ рдердк рдореЛрдбрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реЗрдкрдЫрд┐, рдореИрд▓реЗ рдкрддреНрддрд╛ рд▓рдЧрд╛рдП рдХрд┐ рд╕рд░реНрднрд░, рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛, рдпреБрджреНрдз рдШреЛрд╖рдгрд╛ рдирдЧрд░реА рдХреНрд░реНрдпрд╛рд╕ рднрдЗрд░рд╣реЗрдХреЛ рдерд┐рдпреЛред рд╕рд░реНрднрд░рд▓реЗ latest.log рд╡рд╛ рдбрд┐рдмрдЧрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд▓реЗрдЦреЗрдХреЛ рдЫреИрди, рд░ рдХрдиреНрд╕реЛрд▓, рдЬреБрди рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рдпреЛ рддреНрд░реБрдЯрд┐ рд▓реЗрдЦреНрдиреБрдкрд░реНрдиреЗ рдерд┐рдпреЛ рд░ рд░реЛрдХрд┐рдПрдХреЛ рдерд┐рдпреЛ, рдмрдиреНрдж рднрдпреЛред
рдпрджрд┐ рдЙрдиреА рд▓реЗрдЦреНрди рдЪрд╛рд╣рдБрджреИрдирдиреН рднрдиреЗ, рдЙрд╕рд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред рд╣рд╛рдореАрд╕рдБрдЧ cmdlet рд╕рдБрдЧ Powershell рдЫ Tee-рд╡рд╕реНрддреБ, рдЬрд╕рд▓реЗ рд╡рд╕реНрддреБ рд▓рд┐рдиреНрдЫ рд░ рдлрд╛рдЗрд▓ рд░ рдХрдиреНрд╕реЛрд▓рдорд╛ рдПрдХреИ рд╕рдордпрдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрджрдЫред
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ, Powershell рд▓реЗ StandardOutput рдЙрдард╛рдЙрдиреЗрдЫ рд░ рдлрд╛рдЗрд▓рдорд╛ рд▓реЗрдЦреНрдиреЗрдЫред рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕реБрд░реБ-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХрд┐рдирднрдиреЗ рдпрд╕рд▓реЗ System.ComponentModel.Component рдлрд░реНрдХрд╛рдЙрдиреЗрдЫ рд░ StandardOutput рд╣реЛрдЗрди, рд░ -RedirectStandardOutput рд▓реЗ рдХрдиреНрд╕реЛрд▓рдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рдмрдирд╛рдЙрдиреЗрдЫ, рдЬреБрди рд╣рд╛рдореА рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред
рддрд░реНрдХрд╣рд░реВ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдЙрд╣реА рдЬреЛрдбреА рдореЛрдбрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реЗрдкрдЫрд┐, рд▓реЗрдЦрдХрд▓реЗ рд╕рд░реНрднрд░рдорд╛ рдкрд░реНрдпрд╛рдкреНрдд RAM рдирднрдПрдХреЛ рдпрд╛рдж рдЧрд░реЗред рд░ рдпреЛ рд▓рдиреНрдЪ рддрд░реНрдХрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╣рд░реЗрдХ рдкрдЯрдХ start.bat рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рдЬреБрди рд╕рдмреИрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдХреЗрд╡рд▓ рдпреЛ рд▓рд┐рдкрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдХрд┐рдирдХреА Tee-Object рд▓реЗ StandardOutput рдорд╛рддреНрд░ рдкрдвреНрдЫ рдЬрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп "Just Like This" рднрдирд┐рдиреНрдЫ, рддрдкрд╛рдИрд▓реЗ рдЕрд░реНрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдЙрдиреБ рдкрд░реНрдиреЗрдЫред рдпреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ 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 рдлрд╛рдЗрд▓рд╣рд░реВ рджреЗрдЦреЗрдХрд╛ рдЫрдиреН, рддрд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╕рд░реНрднрд░ рдмрдиреНрдж рднрдПрдХреЛ рдХрд╛рд░рдгрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреЗрдХрд╛ рдЫреИрдирдиреНред рдпреЛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ, рдпрджрд┐ рддрдкрд╛рдЗрдБ рдХреЗрд╡рд▓ рдореЛрдб рдлрд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╡рд╛ рдХреЗрд╣рд┐ рдореЗрдЯрд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ?
рдЕрдм рдПрдХ рдЙрдЪрд┐рдд рдкреБрди: рд╕реБрд░реБ рдЧрд░реМрдВред рд▓реЗрдЦрдХрд▓реЗ рдкрд╣рд┐рд▓реЗ рдЕрдиреМрдареЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рднреЗрдЯреНрдЯрд╛рдП рдЬреБрди рд╕рд░реНрднрд░ рдХрд┐рди рдмрдиреНрдж рднрдП рдкрдирд┐ рд╕рд░реНрднрд░ рдкреБрди: рд╕реБрд░реБ рднрдпреЛред рд╣рд╛рдореА exitcode рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред 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)
}
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реБрдкрдорд╛ рд░рд╣рдиреЗрдЫ рдЬрдмрд╕рдореНрдо рд╕рд░реНрднрд░рд▓реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдЖрдлреНрдиреИ рдХрдиреНрд╕реЛрд▓рдмрд╛рдЯ / рдмрдиреНрдж рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрдиреНрдж рд╣реБрдБрджреИрдиред
рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рд╕рдмреИ рдХреБрд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ рднрдиреЗ, рд╕реБрд░реБ рд╣реБрдиреЗ рдорд┐рддрд┐, рдкреВрд░рд╛ рд╣реБрдиреЗ рдорд┐рддрд┐, рд░ рдкреВрд░рд╛ рд╣реБрдиреЗ рдХрд╛рд░рдг рдкрдирд┐ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫред
рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╕реНрдЯрд╛рд░реНрдЯ-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдирддрд┐рдЬрд╛рд▓рд╛рдИ рдЪрд░рдорд╛ рд▓реЗрдЦреНрдЫреМрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдпреЛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
$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
рдпреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЫреИрдиред рд▓рдЧрдЗрди рд░ рдкрд╛рд╕рд╡рд░реНрдб рдпрд╣рд╛рдБ рд╕рд╛рджрд╛ рдкрд╛рдардорд╛ рд╕рдВрдХреЗрдд рдЧрд░рд┐рдПрдХреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╕рд░реНрднрд░ рд╕реБрд░реБ рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрддрд░рдорд╛ рдкрд╣реБрдБрдЪ рднрдПрдХреЛ рдЫреБрдЯреНрдЯреИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд╡рд╛ рдЕрдЭ рд╕рд╛рдБрдШреБрд░реЛ рд╕рдореВрд╣рдорд╛ред рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдирдХ рдкреНрд░рд╢рд╛рд╕рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдХрдбрд╛рдЗрдХрд╛ рд╕рд╛рде рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред
рд╣рд╛рдореАрд▓реЗ рд╕реНрд╡рдд: рд▓рдЧрдЗрди рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдпреМрдВред рдЕрдм рддрдкрд╛рдИрдВрд▓реЗ рд╕рд░реНрднрд░рдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рдХрд╛рд░реНрдп рджрд░реНрддрд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╣рд╛рдореА Powershell рдмрд╛рдЯ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреЗрдЫреМрдВ, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
$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
рджрд░реНрддрд╛ - Minecraft
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдкрдорд╛ 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
рджрд░реНрддрд╛ - Autologon
рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдмреНрд▓рдХрдорд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрджрдЫред рдпрджрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдПрди рднрдиреЗ, рд╣рд╛рд▓рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдирд╛рдо рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред
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