Script yabwino yoyambira seva ya Minecraft

Script yabwino yoyambira seva ya Minecraft

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 Msika wa Ruvds. Koma magwero onse ali kale m'nkhani. Tsopano, mu dongosolo, momwe izo zonse zinachitikira.

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.

Script yabwino yoyambira seva ya Minecraft

Source: www.habr.com

Kuwonjezera ndemanga