Wolembayo amakonda masewerawa kwambiri, ndipo iyenso ndi woyang'anira seva yaying'ono "kwa abwenzi okha." Monga mwachizolowezi pakati pa anthu osakonda, chilichonse pa seva chimasinthidwa, ndipo izi zimaphatikizapo kusakhazikika ndipo, chifukwa chake, kuwonongeka. Popeza wolemba Powershell amadziwa bwino kuposa malo ogulitsira pamsewu wake, adaganiza zopanga "Script Yabwino Kwambiri Kukhazikitsa Minecraft 2020" Script yomweyi idakhala ngati maziko a template mu
Malamulo omwe tikufunikira
Kudula mitengo kwina
Tsiku lina, nditakhazikitsa ma mods angapo, ndidapeza kuti seva, mwachiwonekere, ikugwa popanda kulengeza nkhondo. Seva sinalembe zolakwika mu latest.log kapena mu debug, ndipo console, yomwe mwachidziwitso iyenera kuti inalemba cholakwika ichi ndikuyimitsa, idatsekedwa.
Ngati sakufuna kulemba, safunikira. Tili ndi Powershell yokhala ndi cmdlet Tee-Chinthu, yomwe imatenga chinthu ndikuchitulutsa ku fayilo ndi ku console nthawi yomweyo.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
Mwanjira iyi, Powershell idzatenga StandardOutput ndikuyilemba ku fayilo. Musayese kugwiritsa ntchito Yambani-Njirachifukwa idzabwezeretsa System.ComponentModel.Component osati StandardOutput, ndi -RedirectStandardOutput idzapangitsa kuti zikhale zosatheka kulowa mu console, zomwe tikufuna kuzipewa.
Yambitsani mikangano
Atakhazikitsa ma mods omwewo, wolemba adawona kuti sevayo inalibenso RAM yokwanira. Ndipo izi zimafuna kusintha mikangano yoyambitsa. M'malo mozisintha nthawi zonse mu start.bat, yomwe aliyense amagwiritsa ntchito, ingogwiritsani ntchito script.
Popeza Tee-Object amangowerenga StandardOutput pomwe chothandiziracho chimatchedwa "Monga Izi", muyenera kupanga script ina. Script iyi idzayambitsidwa ndi Minecraft yokha. Tiyeni tiyambe ndi mikangano.
Kuti achite ulesi womaliza m'tsogolomu, script iyenera kusonkhanitsa mfundo zoyambira pa ntchentche. Kuti tichite zimenezi, tiyeni tiyambe ndi kufufuza Baibulo laposachedwa kuvuta.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
Pogwiritsa ntchito mtundu-chinthu, nthawi zonse tidzatenga chinthucho ndi nambala yaikulu kwambiri, ziribe kanthu kuti mungayika zingati pamenepo. Ulesi womaliza.
Tsopano muyenera kupatsa kukumbukira kwa seva. Kuti muchite izi, tengani kuchuluka kwa kukumbukira kwadongosolo ndikulemba kuchuluka kwake mu chingwe.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
Konzani kuyambiransoko zokha
Wolembayo adawona mafayilo a .bat kuchokera kwa anthu ena, koma sanaganizire chifukwa chomwe seva idayimitsidwa. Izi ndizosasangalatsa, bwanji ngati mungofunika kusintha fayilo kapena kuchotsa china chake?
Tsopano tiyeni tiyambitsenso moyenera. Wolemba m'mbuyomu adakumana ndi zolemba zachilendo zomwe zidayambitsanso seva mosasamala kanthu chifukwa chomwe seva idatseka. Tidzagwiritsa ntchito exitcode. Java imagwiritsa ntchito 0 ngati yopambana, ndiye tivina kuchokera pano.
Choyamba, tiyeni tipange ntchito yomwe idzayambitsenso seva ikalephera.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Cholembacho chikhalabe mu chipika mpaka seva itatsekeka bwino kuchokera pakompyuta yake pogwiritsa ntchito /stop command.
Ngati tiganiza zongosintha zonse, ndiye kuti zingakhale bwino kusonkhanitsa tsiku loyambira, tsiku lomaliza, komanso chifukwa chomaliza.
Kuti tichite izi, timalemba zotsatira za Start-Process kukhala zosinthika. Mu script zikuwoneka motere:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
Kenako timalemba zotsatira ku fayilo. Izi ndi zomwe zabwezedwa kwa ife mu variable:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
Zonsezi zitha kuwonjezeredwa ku fayilo pogwiritsa ntchito Add-Content. Titazipesa pang'ono, timapeza script iyi, ndipo tiyitcha 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
Tsopano tiyeni tipange script yomwe imayambitsa chowongolera.
Kuyamba kolondola
Wolembayo akufuna kuyendetsa mitundu yosiyanasiyana ya Minecraft kuchokera panjira iliyonse mugawo limodzi, komanso athe kusunga zipika mufoda inayake.
Vuto ndiloti ndondomekoyi iyenera kuyambitsidwa ndi wogwiritsa ntchito yemwe walowa mu dongosolo. Izi zitha kuchitika kudzera pa desktop kapena WinRm. Ngati mumayendetsa seva ngati wogwiritsa ntchito kapena woyang'anira, koma osalowa, ndiye kuti Server.jar sangathe ngakhale kuwerenga eula.txt ndikuyamba.
Titha kuloleza kulowa mwaokha powonjezera zolemba zitatu ku registry.
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
Sizotetezeka. Malo olowera ndi mawu achinsinsi akuwonetsedwa pano momveka bwino, kotero kuti muyambe seva muyenera kupanga wogwiritsa ntchito wina yemwe ali ndi mwayi wogwiritsa ntchito, kapena pagulu locheperako. Sitikulimbikitsidwa kugwiritsa ntchito woyang'anira wokhazikika pa izi.
Tinakonza zolowera zokha. Tsopano muyenera kulembetsa ntchito yatsopano ya seva. Tidzayendetsa lamulo kuchokera ku Powershell, kotero liwoneka motere:
$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
Kupanga module
Tsopano tiyeni tiyike zonse mu ma module omwe angagwiritsidwe ntchito mtsogolo. Khodi yonse ya zolembedwa zopangidwa kale ili pano, lowetsani ndikugwiritsa ntchito.
Mutha kugwiritsa ntchito zonse zomwe zafotokozedwa pamwambapa padera ngati simukufuna kudandaula ndi ma module.
Choyamba - Minecraft
Choyamba, tiyeni tipange gawo lomwe silingachite chilichonse kuposa kuyendetsa script yomwe imamvera ndikujambula zotuluka.
M'magawo a block, amafunsa kuchokera pa chikwatu kuti ayambitse Minecraft ndi komwe angayike chipikacho.
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
Ndipo muyenera kukhazikitsa Minecraft motere:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
Tsopano tiyeni tipite ku Handler.ps1 yokonzeka kugwiritsa ntchito
Kuti script yathu ivomereze magawo akaitanidwa, tiyeneranso kufotokoza chipika cha parameter. Chonde dziwani, imayendetsa Oracle Java, ngati mukugwiritsa ntchito kugawa kosiyana muyenera kusintha njira yopita ku fayilo yomwe ikuyenera kuchitika.
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
Register - Minecraft
Zolembazo ndizofanana ndi Start-Minecraft, kupatula kuti zimangolembetsa ntchito yatsopano. Amavomereza zotsutsana zomwezo. Dzina lolowera, ngati silinatchulidwe, limatenga lomwe lili pano.
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
Kulembetsa - Autologon
Mu magawo block, script amavomereza Username ndi Achinsinsi magawo. Ngati Username sanatchulidwe, dzina la wogwiritsa ntchito likugwiritsidwa ntchito.
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."
}
Kuyendetsa script iyi kumawoneka motere:
Set-Autologon -Password "PlaintextPassword"
Momwe mungagwiritsire ntchito
Tsopano tiyeni tiwone momwe wolemba mwiniwake amagwiritsira ntchito zonsezi. Momwe mungayikitsire bwino seva ya Minecraft pa Windows. Tiyeni tiyambe kuyambira pachiyambi.
1. Pangani wogwiritsa ntchito
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. Lembani ntchito kuti muyendetse script
Mutha kulembetsa pogwiritsa ntchito module ngati iyi:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
Kapena gwiritsani ntchito zida zokhazikika:
$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. Yambitsani kulowa-kulowa ndikuyambitsanso makinawo
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
Kukwanitsa
Wolembayo adapanga zolembazo, kuphatikiza yekha, chifukwa chake, adzasangalala kumvera malingaliro anu pakuwongolera script. Wolembayo akuyembekeza kuti code yonseyi inali yothandiza kwa inu, komanso kuti nkhaniyi inali yosangalatsa.
Source: www.habr.com