Iyo yakakodzera Minecraft server yekutanga script

Iyo yakakodzera Minecraft server yekutanga script

Munyori anoda mutambo uyu zvakanyanya, uye iye pachake ndiye maneja weseva diki "kuitira shamwari chete." Sezvinowanzoitika pakati peamateurs, zvese zviri paserver zvinogadziridzwa, uye izvi zvinosanganisira kusagadzikana uye, semhedzisiro, kuputsika. Sezvo munyori wePowershell anoziva zvirinani pane nzvimbo yezvitoro mumugwagwa wake, akafunga kugadzira "Yakanakisa Script yekutangisa Minecraft 2020" Iyo script yakafanana yakashanda sehwaro hwetemplate mukati Ruvds marketplace. Asi zvinyorwa zvese zvatova muchinyorwa. Zvino, muhurongwa, maitirwo azvo zvose.

Mirairo yatinoda

Kumwe kutema miti

Rimwe zuva, mushure mekuisa mamwe ma mods akati wandei, ndakaona kuti sevha, sezviri pachena, yaiputsika isina kuzivisa hondo. Sevha haina kunyora zvikanganiso mune latest.log kana in debug, uye koni, iyo mune dzidziso yaifanira kunge yakanyora kukanganisa uku uye yakamira, yakavharwa.

Kana asingadi kunyora, haadi. Tine Powershell ne cmdlet Tee-Chinhu, iyo inotora chinhu uye ichiburitsa kune faira uye kune iyo console panguva imwe chete.

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

Nenzira iyi, Powershell inotora iyo StandardOutput uye inyore kune faira. Usaedza kushandisa Kutanga-Kuitanokuti ichadzorera System.ComponentModel.Component uye kwete StandardOutput, uye -RedirectStandardOutput ichaita kuti zvisingakwanisi kupinda mu console, izvo zvatinoda kudzivisa.

Tanga nharo

Mushure mekuisa iwo maviri ma mods, munyori akaona kuti sevha zvakare yakanga isina RAM yakakwana. Uye izvi zvinoda kuchinja nharo dzekutanga. Panzvimbo pokuashandura nguva dzose mukutanga.bat, iyo inoshandiswa nemunhu wese, ingoshandisa chinyorwa ichi.

Sezvo Tee-Object ichingoverenga StandardOutput kana iyo inoshandiswa ichinzi "Just Like This", uchafanirwa kugadzira imwe script. Iyi script ichavhurwa naMinecraft pachayo. Ngatitange nemakakatanwa.

Kuti uwane husimbe hwekupedzisira mune ramangwana, chinyorwa chinofanira kuunganidza nharo dzekutanga panhunzi. Kuti tiite izvi, ngatitange nekutsvaga shanduro yezvino forge.

$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1

Tichishandisa sort-object, isu tichagara tichitora chinhu chine nhamba huru, zvisinei kuti vangani rawo rawaisa ipapo. Usimbe hwekupedzisira.

Iye zvino iwe unofanirwa kugovera memory kune server. Kuti uite izvi, tora huwandu hwehurongwa hwekuyeuka uye nyora huwandu hwayo mutambo.

$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"

Kururamisa otomatiki restart

Munyori akaona .bat mafaira kubva kune vamwe vanhu, asi havana kutora chikonzero nei sevha yakamiswa. Izvi hazvina kunaka, ko kana iwe uchingoda kushandura mod faira kana kudzima chimwe chinhu?
Zvino ngatiitei kutangazve kwakakodzera. Munyori akambosangana nemagwaro asinganzwisisike akatangazve sevha zvisinei nekuti sei server yakavharwa. Tichashandisa exitcode. Java inoshandisa 0 sekubudirira, saka tichatamba kubva pano.

Kutanga, ngatiite basa rinozotangazve sevha kana ikatadza.

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

Iyo script icharamba iri muchiuno kudzamara sevha yavhara pasi zvakajairika kubva kune yayo console uchishandisa iyo / mira kuraira.

Kana tikafunga kuita otomatiki zvese, saka zvingava zvakanaka kuunganidza zuva rekutanga, zuva rekupedzisa, uye zvakare chikonzero chekupedzisa.

Kuti tiite izvi, tinonyora mhedzisiro yeStart-Process kuita shanduko. Mune script zvinoita seizvi:

$global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru

Uye tobva tanyora mhinduro kufaira. Izvi ndizvo zvinodzoserwa kwatiri mukusiyana:

$global:Process.StartTime
$global:Process.ExitCode	
$global:Process.ExitTime

Zvese izvi zvinogona kuwedzerwa kufaira uchishandisa Add-Content. Kana takaikama zvishoma, tinowana chinyorwa ichi, uye ngatichidaidzei 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

Zvino ngatigadzire script inotangisa handler.

Kutanga chaiko

Munyori anoda kumhanyisa vhezheni dzakasiyana dzeMinecraft kubva kune chero nzira mune imwe module, uye zvakare kukwanisa kuchengeta matanda mune chaiyo folda.

Dambudziko nderekuti maitiro anofanirwa kutangwa nemushandisi anopinda muhurongwa. Izvi zvinogona kuitwa kuburikidza nedesktop kana WinRm. Kana iwe uchimhanyisa sevha semushandisi wehurongwa kana kunyange maneja, asi usingapindire, ipapo Server.jar haizokwanisi kuverenga eula.txt uye kutanga.

Tinogona kugonesa otomatiki kupinda nekuwedzera matatu manyorero kune 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

Hazvina kuchengeteka. Iyo yekupinda nepassword inoratidzwa pano mune yakajeka, saka kuti utange sevha iwe unofanirwa kugadzira akaparadzana mushandisi ane mukana padanho remushandisi, kana muboka rakamanikana. Izvo hazvikurudzirwe zvachose kushandisa dhizaini maneja pane izvi.

Isu takagadzirisa auto-login. Iye zvino unoda kunyoresa basa idzva revhavha. Isu tichamhanyisa iwo rairo kubva kuPowershell, saka ichaita seizvi:

$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

Kubatanidza module

Iye zvino ngatiise zvese mumamodule anogona kushandiswa gare gare. Yese kodhi yeakagadzirira-akagadzirwa zvinyorwa ari pano, pinza uye shandisa.

Iwe unogona kushandisa zvese zvinotsanangurwa pamusoro apa zvakasiyana kana iwe usingade kunetseka nemamodule.

Kutanga-Minecraft

Chekutanga, ngatigadzire module isingaite chimwe chinhu kunze kwekumhanyisa script inoteerera uye kurekodha standardoutput.

Mumaparameter block, anobvunza kubva kune dhairekitori kuti atange Minecraft uye kupi kwekuisa irogi.

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

Uye iwe uchafanirwa kuvhura Minecraft seizvi:

Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"

Zvino ngatienderere mberi kune yakagadzirira-kushandisa-Handler.ps1

Kuti script yedu igamuchire ma parameter kana yadaidzwa, isu tinodawo kutsanangura parameter block. Ndokumbira utarise, inomhanya Oracle Java, kana uri kushandisa kugovera kwakasiyana iwe unozofanirwa kushandura nzira kuenda kune ino itwa faira.

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

Iyo script inenge yakafanana neStart-Minecraft, kunze kwekuti inongonyoresa basa idzva. Anogamuchira nharo dzakafanana. Zita rekushandisa, kana risina kutaurwa, rinotora razvino.

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

Register-Autogon

Mune iyo parameter block, iyo script inogamuchira Username uye Password paramita. Kana Username isina kutaurwa, zita remushandisi wazvino rinoshandiswa.

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."
 
}

Kumhanyisa script iyi kunoratidzika seizvi:

Set-Autologon -Password "PlaintextPassword"

Nzira yekushandisa sei

Zvino ngatitarisei kuti munyori pachake anoshandisa sei zvose izvi. Maitiro ekuisa zvakanaka sei yeruzhinji Minecraft server paWindows. Ngatitangei kubva pakutanga.

1. Gadzira mushandisi

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

2. Nyoresa basa kuti uite script

Unogona kunyoresa uchishandisa module seizvi:

Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"

Kana shandisa zvakajairika maturusi:

$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. Gonesa auto-login uye reboot muchina

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

Kukwana

Munyori akaita script, kusanganisira iye pachake, saka, achafara kuteerera mazano ako ekuvandudza script. Munyori anotarisira kuti iyi kodhi yese yainyanya kukubatsira iwe, uye kuti chinyorwa chacho chainakidza.

Iyo yakakodzera Minecraft server yekutanga script

Source: www.habr.com

Voeg